String
数据结构
- 如果存储的是整型,直接把值存储在RedisObject里面, 数据类型为int。
- 如果存储的数据量不大(早期版本,32字节),采用动态字符串SDS存储,存储类型是embstr。
- 超过32字节,采用动态字符串SDS进行存储,存储类型是raw。
embstr和raw类型的区别在于,RedisObject和embstr是连续存储的,只需要访存一次,而raw是分开存储的,需要访存两次。
应用场景
- 共享session或者token
- incr 计数
- setnx 实现分布式锁
Hash
数据结构
- 数据量不大时采用压缩列表进行存储
- 否则采用与hashmap类型的存储结构:数组+链表
与HashMap的存储结构有何不同?
- Redis的Hash字典的值只能存储字符串
- Redis的Hash在rehash时采用渐进式Hash
应用场景
- 缓存对象
- 存储商品信息
Set
数据结构
- 无序唯一
- 采用整数集合
- Hash表
应用场景
- 点赞
- 共同关注
Zset
数据结构
- 数据量较小时,采用压缩列表
- 采用跳表存储
应用场景
- 排序
List
数据结构
- 相当于Java的LinkedList
- 数据量较小时,采用压缩链表
- 否则采用快速链表
应用场景
- 消息队列