Redis的数据结构
基本数据结构
String 字符串
Hash 散列
List 列表
Set 集合
Sorted Set 有序集合
进阶
bitmap 位图
GeoHash
HyperLogLogs
终极
- Streams
Redis的内部编码
int
raw
embstr
linkedList
zipList
skipList
hashTable
intset
String(int raw embstr)
List(linkedList zipList)
sortedSet(zipList skipList)
Hash(zipList hashTable)
Set(hashTable intset)
应用场景
缓存(随机访问速度,Disk是ms级别,SSD是微秒级别,内存则是纳秒级别)
计数器
分布式ID生成(步进)
海量数据统计(bitmap)
会话缓存(应用会话缓存存储,保证应用的高可用可伸缩性)
分布式队列、阻塞队列(List,lpush/rpush rpop/lpop 读取写入数据)
分布式锁(setNx)
热点数据存储(list结构,ltrim)
社交需求
set交集(共同好友),set差集(好友推荐、文章推荐),排行榜zset
延迟队列([时间戳+需要延迟时间],score,消息内容作为元素,zadd生产消息,消费者使用zrangeByScore获取当前时间之前的数据,然后rem key)
redis的二进制数据安全特性 binary safe
redis的String类型不同于C语言的string类型
redis的String=>SDS(Simple Dynamic String)
SDS的结构
3.2前
SDS=>len(int),free(int),buffer(string)
3.2后
SDS=>5种string类型
SDS_TYPE_5, SDS_TYPE_8, SDS_TYPE_16, SDS_TYPE_32, SDS_TYPE_64
。。。
内存与分配机制
Redis扩容=>(需加大小+原大小)x2