Redis五种基本数据类型

一、string(字符串)

1、常用命令

set key value [ex] [px] (setex aa 10 test)
get
mset(批量设置)
mget
incr key
decr
incrby key increment 增多少
decrby
incrbyfloat 浮点数增加

2、内部编码
int:8个字节的长整型
embstr:小于等于39个字节的字符串
raw:大于39个字节的字符串

object encording key 查看编码类型

3、使用场景:缓存、技术、共享session、限速等
Redis五种基本数据类型

二、hash(哈希)

1、常用命令
hsetnx
hget key field
hdel key field
hlen key 计算field个数
hmset key field value [field value ...] 批量设置
hmget key field [field ...] 批量获取
hexists key field 判断field是否存在
hkeys key 获取所有field
hvals key 获取所有值
hgetall 获取所有field - value
hincrby key 将field自增
hincrbyfloat key
hstrlen key field 查询value的字符串长度【redis3.2】

在使用hgetall时,如果哈希元素个数比较多,会存在阻塞redis的可能。
若只需获取部分field,可使用hmget命令。
若获取全部,可使用hscan命令。

2、内部编码
ziplist 压缩节省内存
hashtable ziplist不满足时使用

3、对比hash和string
优势:
比通过序列化数据缓存,hash更直观。
减少序列化和反序列化的开销。
序列化存储需要做写入的并发保护。(写入和获取是有可能丢失或者生成脏数据)
劣势:
要控制hash在ziplist和hashtable转换,因为hashtable需要更多内存。

三、list(列表)
Redis五种基本数据类型
列表:有序,可以通过索引获取下标元素,或某个范围的元素。
可重复:与set和sorted set不同的地方
可充当栈和队列的角色。

1、常用命令
添加:
rpush key value [value ..] 从右边插入元素
lpush
linsert key before|after prove value 找到prove元素,在其前面或者后面插入value

查找:
lrange key start end 获取指定范围内元素列表
lindex key index 获取列表指定索引下标的元素
llen key 获取列表长度

删除:
lpop key 从列表左侧弹出元素
rpop
lrem key count value 删除指定元素
count > 0 :从做到右,删除最多count个元素
count < 0 :从右到左,删除最多count绝对值个元素
count = 0 : 删除所有
ltrim key start end 按照索引范围裁剪列表、

修改:
lset key index newValue 修改指定下标元素

阻塞操作:
blpop key [key ...] timeout (异步消息队列消费可以通过这个获取数据)
brpop key [key ...] timeout
lpop 和rpop的阻塞版本,timeout为阻塞时间(秒)
列表为空:
若timeout = 3,那么客户端等到3秒后返回
若timeout = 0,那么客户端会一直阻塞下去。直到有元素进入列表
列表不为空:客户端会立即返回。

注意:
如果有多个键,那么brpop会从左到右遍历键,一旦有一个能弹出元素,客户端立即返回。
如果有过个客户端对同一个键执行brpop,最先执行brpop命令的客户端可以获取到弹出的元素。

2、内部编码:
ziplist压缩列表
linkedlist 链表

3、应用场景
Redis五种基本数据类型
Redis五种基本数据类型

四、set(集合)

不允许有重复元素
无序
无法通过索引下标获取元素

集合内的增删改查
多个集合的交集并集差集

1、常用命令
sadd key element [element ...]
srem
scard key 计算元素个数 0(1)
sismember key element 判读元素是否在集合中。在1,不在0
srandmember key [count] 随机从集合返回指定个数元素
spop key 从集合随机弹出元素
smember key 获取所有元素

集合间的操作:
sinter key [key] 交集
sunion 并集
sdiff 差集
sinterstore destination key [key ...] 将交集的结果保持
sunionstore destination key [key ...] 将并集的结果保持
sdiffstore destination key [key ...] 将差集的结果保持

2、内部编码
intset整数集合(元素个数默认512)
hashtable

3、内部编码
标签、生成随机数,比如抽奖(spop、srandmember)、社交需求

五、sorted set(有序集合)

不可重复性
可排序:通过给每个元素设置一个分数(score)

1、常用命令
zadd key score member [score member ...] 添加成员
zcard key 计算成员个数 O(1)
zscore key member 计算成员分数
zrank key member 从低到高返回排名
zrevrank key member 从高到低返回排名
zrem key member [member ...] 删除成员
zincrby key increment member 增加成员的分数
zrange key start end [withscores] 返回指定排名范围的成员
zrevrange
withscore 选项,同时返回成员的分数
zrangebyscore key min max [withscores] [limit offset count]返回指定分数范围的成员
zrevrangebyscore

2、应用场景
排行榜系统等。