
redis
文章平均质量分 63
ai 翠er
这个作者很懒,什么都没留下…
展开
-
Redis过期时间解析
文章参考:《Redis 设计与实现》黄建宏 设置过期时间 通过 EXPIRE 或者 PEXPIRE 命令,客户端可以以秒或毫秒精度为数据库中的某个键设置生存时间 TTL (Time To Live) SETEX 命令可以设置一个字符串的同时为键设置过期时间 保存过期时间 redisDb 结构的 expires 字典保存了数据库中所有键的过期时间,我们称这个字典为过期字典: 过期字典的键是一个指针,这个指针指向键空间中的某个键对象 过期字典的值十亿额 long long 类型的整数,保存了键的过期时.原创 2021-07-09 11:12:16 · 252 阅读 · 0 评论 -
Redis底层数据结构之整数集合
文章参考:《Redis 设计与实现》黄建宏 整数集合 整数集合时集合键的底层实现之一,当一个集合只包含整数值元素,并且这个集合数量不多时,就会使用整数集合 typedef struct intset { // 编码方式 uint32_t encoding; // 集合包含的元素数量 uint32_t length; // 保存元素的数组 int8_t contents[]; } intset; Contents 数组是整数集合的底层实现;每个项在数组中从小到大有序的排列,并.原创 2021-07-08 13:57:55 · 84 阅读 · 0 评论 -
Redis底层数据结构之压缩列表
文章参考:《Redis 设计与实现》黄建宏 压缩列表 压缩列表 ziplist 是列表键和哈希键的底层实现之一。当一个列表键只包含少量列表项,并且每个列表项要么就是小整数值,要么就是长度比较短的字符串, 那么Redis 就会使用压缩列表当列表键的底层实现。 例如: redis> RPUSH lst 1 3 5 10086 "hello" "world" (integer)6 redis> OBJECT ENCODING lst "ziplist" 列表键里面包含的都是1、3、5、1008.原创 2021-07-07 10:34:10 · 134 阅读 · 0 评论 -
Redis底层数据结构之跳跃表
文章参考 《Redis 设计与实现》黄建宏 Redis(2) 跳跃表 跳跃表 跳跃表 skiplist 是一种有序数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的,平均复杂度 O(logN)、最坏 O(N) Redis 使用跳表作为有序集合集合键的底层实现之一,如果一个有序集合包含的元素数量比较多, 或者有序集合中成员是比较长的字符串时,Redis 就会使用跳表来作为有序集合键的底层实现。 另一个使用跳表的事集群节点中用作内部数据结构。 header 指向跳跃表的表.原创 2021-07-06 10:01:45 · 105 阅读 · 0 评论 -
Redis 底层数据结构之字典
文章参考 《Redis 设计与实现》黄建宏 字典 在字典中,每个键都是独一无二的,程序可以在字典中根据键查找与之相关联的值,或者通过键来更新和删除值。 字典在 Redis 中的应用相当广泛,比如 Redis 的数据库就是使用字典来作为底层实现的,例如: redis> SET msg "hello world" OK 在数据库中创建一个键为 “msg” 值为 “hello world” 的键值对, 这个键值对就保存在数据库的字典里面。 哈希键的底层实现之一也是字典 哈希表 Redis 字典所使用的.原创 2021-07-05 16:11:12 · 193 阅读 · 0 评论 -
Redis 底层数据结构之链表
文章参考:《Redis设计与实现》黄建宏 链表 链表提供了高效的节点重排能力,以及可以顺序访问,也可以通过增删节点灵活调整链表长度,Redis中的列表、发布订阅、慢查询、监视器等功能均用到了链表。 链表和链表节点的实现 链表节点的定义 typedef struct listNode { // 前置节点 struct listNode *prev; // 后置节点 struct listNode *next; // 节点的值 void *value; }listNode; 多个 .原创 2021-07-04 22:58:29 · 162 阅读 · 1 评论 -
Redis 底层数据结构之String
文章参考:《Redis设计与实现》黄建宏 Redis 的 string 类型底层使用的是 SDS(动态字符串) 实现的, 具体数据结构如下: struct sdshdr { int len; // 记录字符串长度 int free; // 记录 buf 数组中未使用字节的数量 char buf[]; // 保存字符串的字节数组 } 例如: free = 0 代表这个 SDS 没有空闲空间存放字符 len = 5 代表这个 SDS 存放的字符串长度是 5 buf 是一个字符数组,保存.原创 2021-07-03 23:47:30 · 97 阅读 · 0 评论