![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
redis
davids_3233
这个作者很懒,什么都没留下…
展开
-
[redis] 主从复制原理
完全重同步复制流程 当 从服务器第一次复制主服务器,从服务器(slave)使用 SLAVEOF host port 命令,向主服务器(master)发送复制请求, master 收到后返回 OK;slave 保存 master 信息,结构 server.h/redisServer 结构中 masterhost, masterport 异步执行复制工作,内部流程如下:1. slave 使用...原创 2020-03-18 00:18:22 · 91 阅读 · 0 评论 -
[redis] 客户端与服务器
客户端 结构 5.0 server.h/clienttypedef struct client { uint64_t id; /* Client incremental unique ID. */ // 客户端类型不同 fd 的取值也不同 // 伪客户端: -1,处理来自 AOF 文件或 Lua 脚本的命令 // 普通客户端:大于 -1。 // CLIENT list 用于...原创 2020-03-14 18:13:55 · 187 阅读 · 0 评论 -
[redis] 事件
文件事件 说明 Redis 服务器通过套接字 Socket 与客户端或其它 Redis 服务器进行连接,文件时间就是服务器对套接字操作的抽象。 套接字变为可应答(acceptable)、可写(writable)、可读(readable) 时,会产生相应的文件事件,服务器通过监听并处理这些事件来完成一系列网络通信操作。 文件事件分为 AE_READABLE 事件(读事件)和 AE_WRITABL...原创 2020-03-08 17:21:47 · 95 阅读 · 0 评论 -
[redis] 数据持久化
RDB 重点 1. RDB 是经过压缩的二进制文件用于保存和还原 Redis 服务器所有数据库中的所有键值对数据。 2. SAVE 命令会阻塞服务器,执行过程中客户端命令请求会被拒绝。 3. BGSAVE 命令由子进程执行保存操作,不会阻塞服务器,可以继续处理客户端命令。 4. 服务器为避免父进程及子进程同时执行 rdbSave 调用,防止竞争条件,所以禁止 SAVE 和 BGSAVE...原创 2020-03-07 00:17:27 · 76 阅读 · 0 评论 -
[redis] 数据库相关 -- 过期键的删除策略
被动删除策略:惰性删除 每次从键空间中获取键时,都检查键是否过期,过期就删除键。否则就返回键 优点:对 cpu 友好 缺点:占用已过期的键,但还没被删除的内存空间。 实现函数 expireIfNeeded,位置 db.c / expireIfNeeded; 流程: 是否所有读写数据库的命令 eg: SET, LRANGE, SADD, HGET, KEYS 等调用 expireIfNeede...原创 2020-03-03 20:06:07 · 113 阅读 · 0 评论 -
[redis] 数据库相关 -- 设置过期时间及生存时间
过期时间及生存时间 命令 1. EXPIRE <key> <ttl> 设置 key 的生存时间为 ttl 秒 2. PEXPIRE <key> <ttl> 设置 key 的生存时间为 ttl 毫秒 3. EXPIREAT <key> <timestamp> 设置 key 的过期时间为 ti...原创 2020-03-03 19:44:16 · 1169 阅读 · 0 评论 -
[redis] 数据库相关 -- 键空间
键空间 版本 5.0 结构 typedef struct redisDb { // 数据库键空间,保存数据库中所有的键值对,字典结构; // 每个键都是字符串对象 // 值可以为 字符串对象、列表对象、哈希表对象、集合对象、有序集合对象 中任意一种 Redis 对象 dict *dict; /* The keys...原创 2020-03-03 19:43:14 · 124 阅读 · 0 评论 -
[redis] 对象
对象类型 注: 5.0 版本中,前缀 REDIS_ 更改为 OBJ_, 源码位置 src/server.h 3.2 版本 ,新增 quicklist 结构,其用于替换 linkedlist 和 ziplist 结构。 结构 typeof struct redisObject { /* 类型 #REDIS_STRING // 字符串 #REDIS_LIST // 列...原创 2020-02-28 21:44:26 · 78 阅读 · 0 评论 -
[redis] 数据结构 -- 紧凑列表
listpack 紧凑列表 说明: 因为ziplist 在极小的概率下有可能发生级联更新,当连续规模较大的级联更新发生时,对 Redis 的性能有比较大的影响。所以 在 5.0 版本中, 新增 listpack 它是对 ziplist 结构的改进,在存储空间上会更加节省,而且结构上也比 ziplist 要精简。 结构struct listpack<T> { int32 tot...原创 2020-02-20 21:25:58 · 322 阅读 · 0 评论 -
[redis] 数据结构 -- 压缩列表
ziplist 压缩列表 压缩列表是一块连续的,无间隙的内存空间;为节约内存使用空间而设计的结构。 列表键和哈希键的底层实现之一 结构struct ziplist <T> { int32 zlbytes; // 整个压缩列表占用字节数 int32 zltail_offset; // 最后一个元素距离压缩列表起始位置的偏移量,用于快速定位到最后一个节...原创 2020-02-20 21:22:33 · 129 阅读 · 0 评论 -
[redis] 数据结构 -- 链表
linkedlist 结构 typedef struct listNode { struct listNode *prev; // 前置节点 struct listNode *next; // 后置节点 void *value; // 节点值,指向 robj 对象,而 robj 对象中的 ptr 指向实际的 SDS 对象 } lis...原创 2020-02-20 21:19:34 · 125 阅读 · 0 评论 -
[redis] 数据结构 -- 整数集合
intset 整数集合 集合键底层实现之一,当集合只包含整数值元素并且数量不多时(由 set-max-intset-entries 配置),使用 intset 作为集合键底层实现 结构typeof struct intset { // 编码方式 uint32_t encoding; // 集合包含的元素数量,也是 contents 数组长度 uint32_t length; // 保存...原创 2020-02-20 20:17:37 · 242 阅读 · 0 评论 -
[redis] 数据结构 -- 跳跃表
skiplist skiplist 是有序集合底层实现之一,另外一个是 ziplist。同时满足以下条件时使用 ziplist 1. 元素数量小于 128 个,可以通过 zset-max-ziplist-entries 来修改 2. 所有 member 的长度都小于 64 字节,可以通过 zset-max-ziplist-value 来修改 skiplist 插入、删除、查找的...原创 2020-02-19 22:01:03 · 108 阅读 · 0 评论 -
[redis] 数据结构 -- 字典
dictht 哈希表 结构 // 哈希表结构 typeof struct dictht { // 哈希表数组 dictEntry **table; // 哈希表大小 unsigned long size; // 哈希表大小掩码,用于计算索引值, 总是等于 size - 1 unsigned long sizemask; // 该哈希表已有...原创 2020-02-19 00:23:35 · 93 阅读 · 0 评论 -
[redis] 数据类型 -- 快速列表
说明 版本 < 3.2 时,使用 linkedlist 和 ziplist,也就是元素少时用 ziplist,元素多时用 linkedlist。 版本 ≥ 3.2时,使用 quicklist。 广泛用于实现 Redis 的各种功能,列表键、发布与订阅、慢查询、监视器等 可以通过 debug object xxx(键),中的 encoding 查看使用了什么结构 ziplist 对空间的利用...原创 2020-02-17 22:17:36 · 104 阅读 · 0 评论 -
[redis] 数据结构 -- 字符串
知识点 [注] 相关源码保存位置:src/redis.h、src/sds.h、src/sds.c。 在 redis 中字符串叫 SDS(Simple Dynamic String,动态字符串) SDS 结构如下 – 是一个带长度信息的字节数组。 struct SDS<T> { T capacity; // 数组容量,1byte T len; // 数组长度,1by...原创 2019-10-11 15:44:42 · 115 阅读 · 0 评论