String
String引用场景:
1、缓存
2、分布式session
3、set NX EX (分布式锁)
4、incr (自增) 全局id实现
5、incr 计数器
6、incr 限流
7、位操作
Hash
1、会把所有的key聚合在同一个key下。
2、不会造成key冲突
3、hget 可以一次性取出所有数据
hash:
1、 expire过期时间 是针对key的 如果数据单独设置过期 不合适
2、不支持bit操作
3、redis集群是根据key进行数据分布,会导致数据不均横
hash底层使用的存储结构
-
ziplist (压缩列表) 存储的不是上一个和下一个的地址 而是长度 节省空间
当filed的个数少于512 并且所有的数据长度小于64个字节
image.png - hashtable
hash引用场景
在购物车里
key:用户id field:商品id value:商品数量
+1:hincr -1:hdecr 删除:hdel 全选:hgetall 商品数:hlen
list列表
有序,左边是列表头,从左到右
基本操作如下:
r 代表右边 l代表左边
list存储结构:
quicklist:双向循环列表+zipList
list应用场景:
lpush rpush lpop rpop 可以用这些来组合成堆或者栈
譬如用lpush rpop 实现消息队列
set集合
无序集合(最大2^32-1)
set存储结构:
- intest (全是int类型的数据,或者元素个数少于512个)
- hashtable (用Key存储值,value为空值)
set应用场景:
- 用spop 随机弹出一个元素 用于抽奖
- 点赞、签到、打卡
zset 有序集合
ZADD key score member [[score member] [score member] …]
score是分值 zset会根据score排序
zset存储结构:
zipList :当节点少于128或者元素的值小于64 byte
skipList(跳表): 有序链表 按数值排序 上一个节点存储下一个节点的指针,此时随机取节点组成上层链表,每次取值先判断上层链表的数值,如果处于中间则降层。
zset应用场景:
- 排行榜