在Redis中, 用户可以通过执行SLAVEOF命令或者设置slaveof选项, 让一个服务器去复制另一个服务器 被赋值的服务器叫做主服务器 对主服务器进行赋值的服务器则被称为从服务器 进行负值中的主从服务器双方的数据库将保存相同的数据, 概念上将这种现象称作"数据库状态一致", 或者简称"一致" 旧版复制功能的实现 旧版功能主要是指Redis 2.8以前版本, 在复制的时候会出现一些低效的情况 Redis的复制功能分为同步(sync)和命令传播(command propagate)两个操作: 同步操作用于将从服务…

5 4 月, 2021 0条评论 225点热度 0人点赞 专注着 阅读全文

redis数据库组成 redis在启动时会启动16个数据库实例 redis客户端链接时, 默认链接的是0数据库 可以通过select index的方式切换数据库 数据存储方式 redis是键值对方式存储数据, 键是字符串对象; 值时具体对象,包括字符串对象, 列表对象, 集合对象, 哈希对象, 有序集合对象 redis在每个数据库中存储数据是采用的是dict(字典)数据结构进行存储 key : 字符串对象redisObject value: 存储的是redisObject对象 读写键控件时的维护操作 在读取一个键(…

4 4 月, 2021 0条评论 216点热度 0人点赞 专注着 阅读全文

Redis服务器是一个事件驱动程序, 服务器需要处理以下两类事件: 文件事件: Redis服务器通过套接字与客户端进行连接, 而文件事件就是服务器对套接字操作的抽象.服务器和客户端的通信会产生响应的文件事件, 而服务器通过监听并处理这些事件来完成一系列网络通信操作。 时间事件: redis服务器中的一些操作需要在给定的时间点执行, 而时间事件就是服务器对这类定时操作的抽象。 文件事件 Redis基于Reactor模式开发了自己的网络事件处理器, 这个处理器被称为文件事件处理器. 文件实践处理器使用I/0多路复用程序…

3 4 月, 2021 0条评论 144点热度 0人点赞 专注着 阅读全文

通过使用由I/O多路复用技术实现的文件事件处理器, Redis服务器使用单线程单进程的方式来处理命令请求, 并与多个客户端进行网络通信。 对于每个与服务器进行连接的客户端, 服务器都为这些客户端建立了响应的redisClient结构. 这个结构保存了客户端当前的状态信息, 以及执行相关功能时需要用到的数据结构 客户端的套接字描述符 客户端的名字 客户端的标志值(flag) 指向客户端正在使用的数据库的指针, 以及该数据库的号码 客户端当前要执行的命令, 命令的参数, 命令参数的个数, 以及指向该命令实现函数的指针 …

3 4 月, 2021 0条评论 180点热度 0人点赞 专注着 阅读全文

在redis中, 对象系统中构建一个引用计数实现的内存回收机制, 通过这一机制, 程序可以通过跟踪对象的引用计数信息, 在适当的时候自动释放对象并进行内存回收.

2 4 月, 2021 0条评论 161点热度 0人点赞 专注着 阅读全文

在redis中主要用到的数据结构包括了简单动态字符串(SDS),双端链表,字典,压缩列表,整数集合等。 在redis中没有直接使用这些数据结构来实现键值对数据库, 而是基于这些数据结构创建一个对象系统. 这个系统包含了字符串对象,列表对象,哈希对象,集合对象和有序集合对象五中类型。每种对象都用到了至少一种数据结构。 对象优点 通过这五中不同类型的对象, Redis可以在执行命令之前, 根据对象的类型来判断一个对象是否可以执行给定的领命。 可以针对不同的使用场景, 为对象设置多种不同的数据结构实现,从而优化对象在不同…

1 4 月, 2021 0条评论 161点热度 0人点赞 专注着 阅读全文

服务器 命令请求的执行过程 使用SET KEY VALUE命令为例, 客户端和服务器共需要执行以下操作: 客户端向服务器发送命令请求SET KEY VALUE 服务器接收并处理客户端发来的命令请求SET KEY VALUE, 在数据库中进行设置操作, 并产生命令回复OK 服务器将命令回复OK发送给客户端 客户端接收服务器返回的命令回复OK, 并将这个回复打印给用户观看 发送命令请求 Redis服务器的命令去请求来自Redis客户端, 当用户在客户端中键入一个命令请求时, 客户端将会将这个命令请求转换成协议格式, 然…

30 3 月, 2021 0条评论 200点热度 0人点赞 专注着 阅读全文

对象编码 哈希对象的编码可以是ziplist或者hashtable ziplist ziplist编码的哈希对象使用压缩列表作为实现, 每当有新的键值对要加入到哈希对象时, 程序会先将保存了键的压缩列表节点推入到压缩列表表尾, 然后再将保存了值的压缩列表节点推入到压缩列表表尾. 优点 保存了同一键值对的两个节点总是紧挨在一起, 保存键的节点在前, 保存值的节点在后. 先添加到哈希对象中的键值对会被放在压缩列表的表头方向, 后来添加到哈希对象中的键值对会被放在压缩列表的表尾方向. hashtable hashtabl…

29 3 月, 2021 0条评论 139点热度 0人点赞 专注着 阅读全文

集合对象的编码可以是intset或者hashtable. intset编码的集合 intset编码集合对象使用整数集合作为底层实现, 集合对象包含的所有元素都被保存在整数集合里面. hashtable hashtable编码的集合对象使用字典作为底层实现, 字典的每个键都是一个字符串对象, 每个字符串对象包含了一个集合元素。而字典的值全部被设置为NULL 编码转换 集合对象保存的所有元素都是整数值 集合对象保存的元素数量不超过512个 不能满足这两个条件的集合对象需要使用hashtable编码 编码转换条件设置 s…

29 3 月, 2021 0条评论 139点热度 0人点赞 专注着 阅读全文

列表对象编码 列表对象可以是ziplist或者linkedlist两种。 编码转换条件 列表对象保存的所有字符串元素的长度都小于64字节 列表对象保存的元素数量小于512个 不能满足这两个条件的列表对象需要使用linkedlist编码 编码转换条件修改 list-max-ziplist-value: 用于修改能够保存的最大的字节数 list-max-ziplist-entries: 用于修改压缩列表在达到最大节点时, 就将压缩列表转换为链表 # Similarly to hashes, small lists ar…

29 3 月, 2021 0条评论 130点热度 0人点赞 专注着 阅读全文