![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
深入Redis原理
文章平均质量分 87
redis基础
修小修
这个作者很懒,什么都没留下…
展开
-
深入Redis原理与应用——Redis 中的对象类型
(1)redis 并未直接使用基本数据结构而是基于基本的数据结构封装了对象系统,包括了字符串对象、列表对象、哈希对象、集合对象和有序集合对象。(2)使用对象的好处是可以才不同的场景对对象设置不同的数据结构实现从而优化效率。(3)redis 对象机制使用了基于引用计数的回收机制,当程序不再使用某个对象时该对象就会自动释放,同时也通过引用计数实现了共享机制,节约内存。(4)redis 带有访问时间记录信息,当开启 maxmemory 时空转时长较大的将会优先被删除。原创 2022-09-06 20:42:09 · 670 阅读 · 0 评论 -
深入Redis原理与应用——Redis中的集群
如果一个集群中半数以上的主节点都认为一个节点为疑似下线,则会将其标记为下线,将节点标记为下线的节点会向集群广播一条关于此主节点下线的消息,所有收到这条消息的节点也会将其标记为已下线。(1)一个 redis 集群通常由多个节点组成,刚开始的时候每个节点都是独立的,为了组件一个可工作的集群,必须将各个独立的节点连接起来,构成一个包含多节点的集群。(1)客户端通过发送 CLUESTER MEET 命令和节点 B 的信息给节点 A,收到命令的节点 A 将与节点 B 进行握手,并依次来确认彼此的存在。原创 2022-09-07 12:42:11 · 165 阅读 · 0 评论 -
深入Redis原理与应用——Redis中的客户端
服务器从协议内容中分析得出 argv 属性和 argc 属性的值之后,服务器将根据 argv[0]的值在命令表(是一个字典,key 为 set、get 等各种操作,值为 redisCommand 格式的处理函数)中查找命令所对应的实现函数,找到后将客户端的 cmd 属性指向这个结构。(2)关闭:客户端可能因客户端进程退出、客户端发送了不符合协议的命令请求、客户端发送的命令过大或要发送给客户端的回复过大等都会导致客户端退出。(5)输出缓冲区:分为固定大小的输出缓冲区和可变大小的输出缓冲区。原创 2022-09-06 21:48:17 · 433 阅读 · 0 评论 -
深入Redis原理与应用——Redis中的服务端
(3)初始化服务器的数据结构:在 initServerConfig 函数中只创建了命令表一个数据结构,然而服务器还需要其它数据结构,比如 server.clients 链表(记录了与服务器相连的每个客户端的状态)、server.db 数组(包含了服务器的所有数据库)等等。(1)发送的命令请求来自 redis 客户端,当用户在客户端中键入一个命令时,客户端会将这个命令请求转换成协议格式,然后通过连接到服务器的套接字将协议格式的命令请求发送给服务器。该函数复制管理服务器的资源并保持服务器自身的良好运转。原创 2022-09-06 22:21:36 · 240 阅读 · 0 评论 -
深入Redis原理与应用——Redis的数据持久化
(2)AOF 持久化功能可以分为命令追加(服务器每执行完一个写命令都会将写命令追加到aof_buf 缓冲区的末尾)、文件写入和文件同步(服务器每结束一个事件循环都考虑是否将aof_buf 缓冲区中的内容同步到 AOF 文件中,具体服务器的设置有 always,everysec 和 no,默认 everysec)(写入和同步的区别是在调用 write 函数写入文件之前还有一个缓冲区缓冲区满了才真正写入,而同步则是强制将缓冲区数据写入文件中)三个步骤。(5)服务器载入 RDB 文件时将一直处于阻塞状态。原创 2022-09-06 21:16:28 · 200 阅读 · 0 评论 -
深入Redis原理与应用——Redis中的事件
当被监听的套接字准备好执行连接应答(accept)、读取(read)、写入(write)关闭(close)等操作时,与之相对应的文件事件就会产生,这时文件事件处理器就会调用套接字之前关联好的事件处理器来处理这些事件。尽管多个文件事件可能会并发地出现,但 IO 多路复用程序总是会将所有产生事件的套接字都放到一个队列里面然后通过这个队列以有序、同步、每次一个套接字的方式向文件事件分派器传送套接字,上一个套接字传输的事件处理完后才会接着处理下一个。时间事件的处理时间通常比设定的到达时间晚一点。原创 2022-09-06 21:35:09 · 282 阅读 · 0 评论 -
深入Redis原理与应用——主从复制
(2)建立套接字连接:设置完 IP 和端口后从服务器会创建连向主服务器的套接字连接,如果连接成功从服务器会为这个套接字创建一个专门用于复制操作的文件事件处理器,将负责后续的复制工作。在同步操作之前只有从服务器是主服务器的客户端;同步操作之后主服务器也会称为从服务器的客户端(完整重同步发送缓冲区中的命令,部分重同步发送复制积压缓冲区中的数据都需要主是从的客户端)。(4)旧版命令传播:同步之后为了继续保持主从一致,主服务器会将导致主从不一致的命令发送给从服务器,让从服务器执行。(1)检测主从服务器的网络状态。原创 2022-09-06 23:42:44 · 103 阅读 · 0 评论 -
深入Redis原理与应用——哨兵模式Sentinel
(1)由一个或多个 Sentinel 实例组成的 Sentinel 系统可以监视任意多个主服务器及其下属的所有从服务器,当主服务器下线后自动将主服务器的某个从服务器升级称为新的主服务器。首先会挑选 server1 属下的一个从服务器并将其升级为新的主服务器。之后 sentinel 系统会向 server1 属下的所有从服务器发送新的复制指令让他们称为新的主服务器的从服务器。sentinel 会继续监视下线的 server1,使其上线后作为新的主服务器的从服务器。原创 2022-09-07 11:13:14 · 264 阅读 · 0 评论 -
深入Redis原理与应用——Redis 中的基本数据结构
(4)压缩列表节点的属性有 previous_entry_length(可以为 1 字节或 5 字节,表示前一个节点的长度,程序可以通过指针运算逆序查找),encoding(长度可以为 1 字节两字节或五字节,00、01、10 开头分别表示 1 字节长度、2 字节长度和 5 字节长度的字节数组,由于前两位保存了状态所以才有前面的 2 的 6 次方和 2 的 14 次方,注意 5 字节的数组第一个字节只用到前两位保存状态,长度数据只使用后 4 个字节;这是因为(负载因子即使用的节点数处以槽的数量)。原创 2022-09-06 16:41:45 · 134 阅读 · 0 评论 -
深入Redis原理与应用——数据库杂论
(1)服务器中的所有数据库都保存在 redisServer 结构的 db 数组中,db 数组的每一项都是一个 redisDb 结构。dbnum 属性值由服务器配置决定,其决定了数据库的数量。(2)redisClient 中的 redisDb 类型的 db 指针指向了当前选择的数据库。(3)数据库的键空间:因为 redis 是一个键值对数据库服务器,服务器中的每个数据库都由一个 redisDb 结构表示,其中 redisDb 中的 dict 字典保存了所有的键值对,称之为键空间。原创 2022-09-06 20:50:47 · 180 阅读 · 0 评论