-
String
使用SDS(simple Dynamic String)存储,类似arraylist,可通过预分配冗余空间减少内存的频繁分配
简单的key-value类型,value不仅可以是string,也可以是数字
编码方式:raw、int、embstr
String能够进行扩容,会有一定的free空间,如果删除部分字段的时候空闲时间不会立即删除而是留给下一次操作,如果下一次操作还是没有操作free空间,才会删除回收。而且是按照长度来寻找字符串。
-
Hash
HashTable、ziplist
内部包含两个hashtable,但是只有一个是有值的,在扩缩容时需要分配新的HashTable进行渐进式rehash
渐进式hash: 在rehash的同时保留两个hash结构,查询会同时查询两个hash结构,循序渐进将旧结构迁移到新字典,搬迁完成时会用新的结构取代
是string类型的field和value的映射表,hash比较适合用于存储对象,后续操作的时候可以仅修改这个对象中的某个字段的值,比如用户信息商品信息等
-
List
ziplist , LinkedList双端链表
双向链表,可以支持反向查找和遍历操作方便,但是会有部分额外开销
lrange 命令可以基于list实现分页查询,高性能分页
-
set
intset , Hashtable
是一种无序集合,提供了判断某个成员是否在一个set集合内的重要接口,可以基于set实现交集、并集、差集的操作
-
Sorted Set (Zset)
Skiplist (跳跃链表) ,ziplist
增加了权重参数score,是集合中的元素能按照score有序排列
SkipList:相邻的节点之间也增加指针 ,插入时节点的层数是随机的,插入节点只需要修改节点前后的指针,不需要对多个节点进行调整,降低了插入的复杂度,最大层数32层。
-
Bitmap
支持按bit位存储信息,用来实现布隆过滤器
-
HyperLogLog
不精确的去重计数功能
-
Geospatial
保存地理位置
-
pub/sub
订阅发布功能,可以做最简单的消息队列,如果消费者下线,消息会丢失
-
Pipeline
可以批量执行一组指令,一次性返回全部结果,影响qps峰值的是pipeline批次指令的数目。
-
Lua 脚本
可以保证多个指令的原子性执行
redis的数据类型和底层实现
最新推荐文章于 2024-08-11 18:40:09 发布