2021年8月11日

服务器 - 《Redis设计与实现》读书笔记

摘要: Redis服务器负责与多个客户端建立网络连接,处理客户端发送的命令请求,在数据库中保存客户端执行命令所产生的数据,并通过资源管理来维持服务器自身的运转 命令请求执行流程 客户端将命令请求发送给服务器 服务器读取命令请求,并分析出命令参数 命令执行器根据参数查找命令的实现函数,然后执行实现函数并得出命 阅读全文

posted @ 2021-08-11 17:39 果然朝辉 阅读(67) 评论(0) 推荐(0) 编辑

客户端 - 《Redis设计与实现》读书笔记

摘要: 对于每个与服务器进行连接的客户端,服务器都为这些客户端建立了相应的src/server.h/client结构(客户端状态),这个结构保存了客户端当前的状态信息,以及执行相关功能时需要用的数据结构 创建客户端 普通客户端 创建普通客户端 通过网络连接与服务器进行连接的普通客户端,那在客户端使用conn 阅读全文

posted @ 2021-08-11 17:38 果然朝辉 阅读(68) 评论(0) 推荐(0) 编辑

事件 - 《Redis设计与实现》读书笔记

摘要: Redis服务器是一个事件驱动程序,服务器处理的事件分为时间事件和文件事件两种类型 文件事件 服务器对套接字操作的抽象 Redis服务器通过套接字与客户端(或者其他Redis服务器)进行连接 服务器与客户端(或者其他服务器)的通信会产生相应的文件事件,而服务器则通过监听并处理这些事件来完成一系列网络 阅读全文

posted @ 2021-08-11 17:37 果然朝辉 阅读(47) 评论(0) 推荐(0) 编辑

AOF持久化 - 《Redis设计与实现》读书笔记

摘要: AOF持久化:通过保存Redis服务器执行的写命令来记录数据库状态 AOF持久化的实现 AOF持久化的步骤: 写命令追加到服务器状态的aof_buf缓冲区 此步骤由feedAppendOnlyFile函数完成 当AOF持久化功能处于打开状态时,服务器在执行完一个命令之后, 会以协议格式将被执行的写命 阅读全文

posted @ 2021-08-11 17:36 果然朝辉 阅读(62) 评论(0) 推荐(0) 编辑

RDB持久化 - 《Redis设计与实现》读书笔记

摘要: RDB持久化功能:将Redis在内存中某一个时间点的数据库状态经过压缩保存到磁盘上的一个RDB二进制文件里面,避免数据意外丢失, 通过RDB二进制文件可以还原生成RDB二进制文件那个时间点的数据库状态, RDB文件的创建: 内存 ⇒ 磁盘 save命令: 阻塞Redis服务器进程,直到RDB文件创建 阅读全文

posted @ 2021-08-11 17:35 果然朝辉 阅读(63) 评论(0) 推荐(0) 编辑

数据库键空间过期键处理 - 《Redis设计与实现》读书笔记

摘要: 切换数据库 默认情况下,Redis客户端的目标数据库为0号数据库 通过修改client.db指针,指向不同数据库,从而实现切换目标数据库的功能 客户端切换目标数据库命令: SELECT 数据库序号 在处理多数据库程序时,为了避免误操作(特别像FLUSHDB这样的危险命令), 最好先执行一个SELEC 阅读全文

posted @ 2021-08-11 17:34 果然朝辉 阅读(97) 评论(0) 推荐(0) 编辑

内存回收与对象共享 - 《Redis设计与实现》读书笔记

摘要: Redis在对象系统中构架了一个引用计数计数实现了内存回收机制 和 对象共享机制 基于引用计数技术的 内存回收机制 程序通过跟踪对象的引用计数信息,在适当的时候自动释放对象并进行内存回收 基于引用计数技术的 对象共享机制 共享对象机制对于节约内存非常有帮助,数据库中保存的相同值对象越多,对象共享就越 阅读全文

posted @ 2021-08-11 17:32 果然朝辉 阅读(98) 评论(0) 推荐(0) 编辑

类型检查与命令多态 - 《Redis设计与实现》读书笔记

摘要: Redis中用于操作键的命令分为两种类型 可以对任何类型的键执行 只能对特定类型的键执行 类型检查的实现 在执行一个类型特定的命令之前,Redis会先检查输入键对应的值对象的类型是否能够执行命令,然后在决定是否执行命令 类型特定命令所进行的类型检查是通过redisObject结构的type属性来实现 阅读全文

posted @ 2021-08-11 17:31 果然朝辉 阅读(62) 评论(0) 推荐(0) 编辑

有序集合对象 - 《Redis设计与实现》读书笔记

摘要: 有序集合对象的编码可以是ziplist或者skiplist ziplist编码的有序集合对象使用压缩列表作为底层实现 每个集合元素使用两个紧挨在一起的压缩列表节点来保存 第一个节点保存元素的成员,第二个节点保存元素的分值 压缩列表内的集合元素按分值从小到大进行排序 分值较小的元素被放置在靠近表头的方 阅读全文

posted @ 2021-08-11 17:29 果然朝辉 阅读(56) 评论(0) 推荐(0) 编辑

集合对象 - 《Redis设计与实现》读书笔记

摘要: 集合对象的编码可以是intset或者hashtable intset编码的集合对象使用整数集合作为底层实现 集合对象包含的所有元素都被保存在整数集合里面 hashtable编码的集合对象使用字典作为底层实现 字典的每个键都是一个字符串对象,每个字符串对象包含了一个集合元素 字典的每个值都是NULL 阅读全文

posted @ 2021-08-11 17:28 果然朝辉 阅读(44) 评论(0) 推荐(0) 编辑

列表对象 - 《Redis设计与实现》读书笔记

摘要: 列表对象的编码可以是ziplist或者linkedlist ziplist编码的列表对象使用压缩列表作为底层实现,每个压缩列表节点保存了一个列表元素 linkedlist编码的列表对象使用双端链表作为底层实现,每个双端链表节点保存了一个字符串对象,每个字符串对象保存了一个列表元素 字符串对象是Red 阅读全文

posted @ 2021-08-11 17:27 果然朝辉 阅读(37) 评论(0) 推荐(0) 编辑

哈希对象 - 《Redis设计与实现》读书笔记

摘要: 哈希对象的编码可以是ziplist或者hashtable ziplist编码的哈希对象使用压缩列表作为底层实现 保存了同一个键值对的两个节点总是紧挨在一起的,保存键的节点在前,保存值的节点在后, 先添加到哈希对象中的键值对会被放在压缩列表的表头方向,后添加到哈希对象中的键值对会被放在压缩列表的表尾方 阅读全文

posted @ 2021-08-11 17:27 果然朝辉 阅读(43) 评论(0) 推荐(0) 编辑

字符串对象 - 《Redis设计与实现》读书笔记

摘要: 字符串对象的编码可以是int、raw和embstr 一个字符串对象保存的是整数值,并且这个整数值可以用long类型来表示,那么用long类型的整数保存,即编码为int 一个字符串对象保存的是浮点数值,并且这个浮点数值可以用long double类型来表示, 那么用embstr编码的简单动态字符串(S 阅读全文

posted @ 2021-08-11 17:26 果然朝辉 阅读(47) 评论(0) 推荐(0) 编辑

导航