随笔分类 -  redis

redis
摘要:第 17 章 集群 17.1 节点 一个集群通常多个节点组成,开始时相互独立,处于一个只包含自己的集群中 连接各个节点的工作使用 CLUSTER MEET 命令来完成: CLUSTER MEET <ip> <port> 节点向 ip 和 port 指定的节点进行握手,成功后就添加到节点所在的集群中 阅读全文
posted @ 2021-07-18 00:05 zephxu 阅读(77) 评论(0) 推荐(0)
摘要:第 16 章 Sentinel Sentinel 哨兵组成了一个 Redis 高可用性的方案: ​ 由一个或多个 Sentinel 实例组成的 Sentinel 系统可以监视任意多个主服务器及其所有从服务器,并在主服务器下线时将其从服务器升级为新的主服务器,继续执行要求,当先前的主服务器再次上线时则 阅读全文
posted @ 2021-07-13 19:59 zephxu 阅读(84) 评论(0) 推荐(0)
摘要:第 15 章 复制 执行 SLAVOF 命令或设置 slaveof 选项,让一个服务器去复制另外一个服务器,被复制的为主服务器,对主服务器进行复制的是从服务器 进行复制的主从服务器双方的数据库将保存相同的数据,即数据库状态一致,简称“一致” 15.1 旧版复制功能的实现 复制功能分为同步和命令传播两 阅读全文
posted @ 2021-07-02 22:30 zephxu 阅读(66) 评论(0) 推荐(0)
摘要:第 14 章 服务器 14.1 命令请求的执行过程 例如: 客户端执行以下命令: 127.0.0.1:6379> set key value OK 客户端和服务器需要执行的操作: 客户端发送 set key value 服务器处理收到的请求,并在数据库中设置 服务器回复 OK 给客户端 客户端接收 阅读全文
posted @ 2021-07-01 23:48 zephxu 阅读(71) 评论(0) 推荐(0)
摘要:第 13 章 客户端 Redis 服务器是典型的一对多服务器程序,通过使用由 I/O 多路复用技术实现的文件事件处理器,服务器使用单线程单进程的方式来处理命令请求,并与多个客户端进行网络通信 redis.h/redisClient 结构保存了客户端当前的状态信息,以及执行相关功能需要用到的数据结构: 阅读全文
posted @ 2021-06-29 16:52 zephxu 阅读(67) 评论(0) 推荐(0)
摘要:第 12 章 事件 Redis 服务器是一个事件驱动程序,需要处理以下两类事件: 文件事件:服务器通过套接字与客户端相连,文件事件即服务器对套接字操作的抽象;服务器与客户端的通信会产生相应的文件事件,服务器通过监听和处理事件拉完成一系列网络通信操作 时间事件:服务器中的一些操作需要在给定的时间点执行 阅读全文
posted @ 2021-06-24 20:27 zephxu 阅读(63) 评论(0) 推荐(0)
摘要:第 11 章 AOF 持久化 AOF(Append Only File)持久化,通过保存服务器所执行的写命令来记录数据库状态 被写入 AOF 文件的所有命令都是以 Redis 命令请求协议保存的,即纯文本格式 11.1 AOF 持久化的实现 三个步骤: 命令追加 文件写入 文件同步 11.1.1 命 阅读全文
posted @ 2021-06-23 17:34 zephxu 阅读(72) 评论(0) 推荐(0)
摘要:第 10 章 RDB 持久化 数据库状态:服务器中的非空数据库以及它们的键值对统称为数据库状态 Redis 提供 RDB 持久化功能,将内存中的数据库状态保存到磁盘中,避免数据意外丢失 RDB 文件是一个经过压缩的二进制文件,还可以通过该文件还原生成 RDB 文件时的数据库状态 10.1 RDB 文 阅读全文
posted @ 2021-06-22 19:37 zephxu 阅读(83) 评论(0) 推荐(0)
摘要:第 9 章 数据库 9.1 服务器中的数据库 redis.h/redisServer 结构的 db 数组中,每个元素都是 redis.h/redisDb 结构,代表一个数据库 初始化服务器时会根据服务器状态的 dbnum 属性来决定创建多少个数据库 dbnum 由服务器配置的 database 选项 阅读全文
posted @ 2021-06-21 21:04 zephxu 阅读(61) 评论(0) 推荐(0)
摘要:第 8 章 对象 8.1 对象的类型与编码 Redis 使用对象来表示数据库中的键和值,即每次创建一个键值对时,至少创建了两个对象,一个是键对象,一个是值对象 Redis 每个对象都是由 redisObject 结构表示 8.1.1 类型 type 记录了对象类型 对于 Redis 键值对来说,键总 阅读全文
posted @ 2021-06-20 20:57 zephxu 阅读(83) 评论(0) 推荐(0)
摘要:第 7 章 压缩列表 ziplist 是列表键和哈希表底层实现之一 当一个列表键只包含少量列表项,且每个列表项是小整数值或者长度比较短的字符串时会使用 ziplist 127.0.0.1:6379> rpush lst 1 3 5 10086 "hello" "world" (integer) 6 阅读全文
posted @ 2021-06-16 23:38 zephxu 阅读(67) 评论(0) 推荐(0)
摘要:第 6 章 整数集合 当一个集合只包含整数值元素,并且这个集合的元素数量不多时,Redis 会使用整数集合作为集合键的底层实现 127.0.0.1:6379> sadd numbers 1 3 5 7 9 11 (integer) 6 127.0.0.1:6379> object encoding 阅读全文
posted @ 2021-06-16 23:37 zephxu 阅读(56) 评论(0) 推荐(0)
摘要:第 5 章 跳跃表 跳跃表是一种有序数据结构,通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的 支持平均 O(logN)、最坏 O(N) 复杂度的节点查找,还可以通过顺序性操作来批量处理节点 Redis 使用跳跃表作为有序集合键的底层实现之一,当有序集合包含的元素数量多,或者有 阅读全文
posted @ 2021-06-15 21:16 zephxu 阅读(68) 评论(0) 推荐(0)
摘要:第 4 章 字典 字典在 Redis 的应用:数据库、哈希键的底层实现之一 4.1 字典的实现 4.1.1 哈希表 哈希表由 dict.h/dictht 结构定义 table 是一个数组,每个元素都是一个指向 dict.h/dictEntry 结构的指针,而每个 dictEntry 保存着一对键值对 阅读全文
posted @ 2021-06-15 19:26 zephxu 阅读(74) 评论(0) 推荐(0)
摘要:第 3 章 链表 链表在 Redis 中应用广泛,如列表键的底层实现之一是链表 当一个列表键包含了数量比较多的元素 列表中包含的元素都是比较长的字符串时 integers 列表键包含了 [1, 1024] 共 1024 个整数,其底层实现就是链表,每个节点都保存了一个整数值 发布与订阅、慢查询、监视 阅读全文
posted @ 2021-06-15 15:50 zephxu 阅读(47) 评论(0) 推荐(0)
摘要:第 2 章 简单动态字符串 Redis 没有直接使用 C 语言的字符串来表示(即以空字符结尾的字符数组),构建一张简单动态字符串 SDS 的抽象类型,作为默认字符串 在 Redis 中,C 字符串作为字符串字面量,使用在没有对字符串修改的地方,如打印日志: 但是需要的不仅仅是字符串字面量时,而是可以 阅读全文
posted @ 2021-06-15 15:23 zephxu 阅读(54) 评论(0) 推荐(0)