Redis是一个Key-Value的存储系统,使用ANSI C语言编写。
key的类型是字符串。
value的数据类型有:
- 常见:
- string字符串类型、
- list列表类型、
- set集合类型、
- sortedset(zset)有序集合类型、
- hash类型。
- 不常见的:
- bitmap位图类型
- geo地理位置类型。
- Redis5.0新增一种:stream类型
注意:Redis中命令是忽略大小写,(set SET),key是不忽略大小写的 (NAME name)
1、Redis的Key的设计
- 用:分割
- 把表名转换为key前缀, 比如: user:
- 第二段放置主键值
- 第三段放置列名
比如:用户表user, 转换为redis的key-value存储
userid | username | password | |
9 | Tom | 1234 | [email protected] |
- username 的 key: user:9:username
- {userid:9,username:Tom}
- email的key user:9:email
- 表示明确:看key知道意思
- 不易被覆盖
2、string字符串类型
Redis的String能表达3种值的类型:字符串、整数、浮点数 100.01 是个六位的串
常见操作命令如下表:
命令名称 | 命令格式 | 命令描述 |
set | set key value | 赋值 |
get | get key | 取值 |
getset | getset key value | 取值并赋值 |
setnx | setnx key value | 当key不存在时才用赋值set key value NX PX 3000 原子操作,px 设置毫秒数 |
append | append key value | 向尾部追加值 |
strlen | strlen key | 获取字符串长度 |
incr | incr key | 递增数字 |
incrby | incrby key increment | 增加指定的整数 |
decr | decr key | 递减数字 |
decrby | decrby key decrement | 减少指定的整数 |
应用场景:
- key和命令是字符串
- 普通的赋值
- incr用于乐观锁
incr:递增数字,可用于实现乐观锁 watch(事务)
- setnx用于分布式锁
当value不存在时采用赋值,可用于实现分布式锁
举例:
127.0.0.1:6379> setnx name zhangf #如果name不存在赋值
(integer) 1
127.0.0.1:6379> setnx name zhaoyun #再次赋值失败
(integer) 0
127.0.0.1:6379> get name
"zhangf"
127.0.0.1:6379> set age 18 NX PX 10000 #如果不存在赋值 有效期10秒
OK
127.0.0.1:6379> set age 20 NX #赋值失败
(nil)
127.0.0.1:6379> get age #age失效
(nil)
127.0.0.1:6379> set age 30 NX PX 10000 #赋值成功
OK
127.0.0.1:6379> get age
"30"
2、list列表类型
- list列表类型可以存储有序、可重复的元素
- 获取头部或尾部附近的记录是极快的
- list的元素个数最多为2^32-1个(40亿)
常见操作命令如下表:
命令名称 | 命令格式 | 命令描述 |
lpush | lpush key v1 v2 v3 ... | 从左侧插入列表 |
lpop | lpop key | 从列表左侧取出 |
rpush | rpush key v1 v2 v3 ... | 从右侧插入列表 |
rpop | rpop key | 从列表右侧取出 |
< |