![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Redis
文章平均质量分 87
dullet
这个作者很懒,什么都没留下…
展开
-
【Redis】发布与订阅
除订阅频道外,客户端还可以通过执行PUBSCRIBE命令订阅一个或多个模式,从而成为这些模式的订阅者,每当有其它客户端向某个频道发送消息时,消息不仅会被发送给这个频道的所有订阅者,还会被发送给所有与这个频道相匹配的模式的订阅者。通过执行SUBSCRIBE命令,客户端可以订阅一个或多个频道,从而成为这些频道的订阅者,每当有其它客户端向被订阅的频道发送消息时,频道的所有订阅者都会收到这条消息。执行UNSUBCRIBE命令订阅频道。执行PSUBSCRIBR命令订阅模式。执行SUBCRIBE命令订阅频道。.....原创 2022-08-10 13:46:39 · 443 阅读 · 1 评论 -
【Redis】集群
因为集群中的每个节点都会将自己的solts数组通过消息发送给集群中的其它节点,并且每个接收到slots数组的节点都会将数组保存到相应节点的clusterNodw结构里面,因此,集群中的每个节点都会知道数据库中的16384个槽分别被指派给了集群中的哪些节点。集群中的每个节点都会定期向集群中其他节点发送PING消息,以此来检测对方是否在线,如果接受PING消息的节点没有在规定时间内,向发送PING消息的节点返回PONG消息,那么发送PING消息的节点就会接受PING消息的节点标记为疑似下线。.........原创 2022-08-10 13:46:25 · 296 阅读 · 0 评论 -
【Redis】Sentinel
当一个主服务器被判断为客观下线时,监视这个下线主服务器的各个Sentinel会进行协商,最先向目标Sentinel发送设置要求的源Sentinel将成为目标Sentinel的局部领头Sentinel,而之后接受到的所有设置要求都会被拒绝,如果由某个Sentinel被半数以上的Sentinel设置成了局部领头Sentinel,那么这个Sentinel成为领头Sentinel,并由这个Sentinel对下线主服务器执行故障转移操作。根据这些信息,Sentinel会对从服务器的实例结构进行更新。.........原创 2022-08-10 13:46:11 · 273 阅读 · 0 评论 -
【Redis】复制
为了让主从服务器再次回到一致状态,主服务器需要对从服务器执行命令传播操作:主服务器会将自己执行的写命令,也即是造成主从服务器不一致的那条写命令,发送给从服务器执行,当从服务器执行了相同的写命令后,主从服务器将再次回到一致状态,:当从服务器在断线后重新连接主服务器时,如果条件允许,主服务器可以将主从服务器连接断开期间执行的写命令发送给从服务器,从服务器只要接收并执行这些写命令,就可以将数据库更新至主服务器当前所处的状态。主服务器会将自己的运行ID传送给从服务器,而从服务器则会将这个运行ID保存起来。...原创 2022-08-09 17:15:00 · 430 阅读 · 0 评论 -
【Redis】服务器
Redis服务器负责与多个客户端建立网络连接,处理客户端发送的命令请求,在数据库中保存客户端执行命令所产生的数据,并通过资源管理来维持服务器自身的运转。在完成对服务器状态server变量的初始化之后,服务器需要载入RDB文件或者AOF文件,并根据文件记录的内容来还原服务器的数据库状态,Redis服务器中的severCron函数默认每隔100毫秒执行一次,这个函数负责管理服务器的资源,并保持服务器自身的良好运转。根据客户端状态的argv[0]参数,在命令表中查找参数所指定的命令。至此,服务器初始化工作完成。.原创 2022-08-09 17:00:00 · 192 阅读 · 0 评论 -
【Redis】客户端
如果输出缓冲区的大小超过了软性限制所设置的大小,但小于硬性限制, 那么服务器将使用客户端状态结构的obuf_soft_limit_reached_time属性记录下客户端到达软性限制的起始时间;如果客户端时通过网络连接与服务器进行连接的普通客户端,那么在客户端使用connect函数连接到服务器时,服务器就会调用连接事件处理器,为客户端创建相应的客户端状态,并将这个新的客户端状态添加到服务器状态结构clients链表的末尾。,每个客户端都有两个输出缓冲区可用,一个缓冲区大小固定,另一个缓冲区的大小可变。..原创 2022-08-09 16:45:00 · 308 阅读 · 0 评论 -
【Redis】事件
当Redis服务器进行初始化时,程序会将这个连接应答处理器和服务器监听套接字的AE_READABLE事件关联起来,当有客户端用sys/socket.h/connect函数连接服务器监听套接字的时候,套接字就会产生AE_READABLE事件,引发连接应答处理器执行。当服务器有命令恢复需要传送给客户端时,服务器会将客户端套接字的AE_WRITABLE事件和命令回复处理器关联起来,当客户端准备好接收服务器传回的命令回复时,就会产生AE_WRITABLE事件,引发命令回复处理器执行,并执行相应的套接字写入操作。..原创 2022-08-09 16:30:00 · 238 阅读 · 0 评论 -
【Redis】AOF持久化
因为服务器在处理文件事件时可能会执行写命令,使得一些内容被追加到aof_buf缓冲区里面,所以在服务器每次结束一个事件循环之前,它都会调用flushAppendOnlyFile函数,考虑是否需要将aof_buf缓冲区中的内容写入和保存到AOF文件里面。通过AOF重写功能,Redis服务器可以创建一个新的AOF文件来替代现有的AOF文件,新旧两个AOF文件所保存的数据库状态相同,但新AOF文件不会包含任何浪费空间的冗余命令,所以新AOF文件的体积通常会比旧AOF文件的体积要小很多。...原创 2022-08-09 16:15:00 · 171 阅读 · 0 评论 -
【Redis】RDB持久化
Redis的服务器周期性操作函数serverCron默认每隔100ms就会执行一次,该函数用于对正在运行的服务器进行维护,其中一项工作就是检查save选项所设置的保存条件是否已经满足,如果满足,就会执行BGSAVE。RDB文件载入工作是在服务器启动时自动执行的,只要Redis服务器在启动时检测到RDB文件存在,它就会自动载入RDB文件。,它将自己的数据库状态储存在内存里面,所以一旦服务器进程退出,服务器中的数据库状态也会消失不见。在BGSAVE命令执行期间,客户端发送的BGSAVE命令会被服务器拒绝。...原创 2022-08-09 16:00:00 · 206 阅读 · 0 评论 -
【Redis】数据库
在过期键比较多的情况下,删除过期键这一行为可能会占用相当一部分CPU时间,在内存不紧张但是CPU时间非常紧张的情况下,将CPU时间用在删除和当前无关的过期键上,无疑会对服务器的响应时间和吞吐量造成影响。放任键过期不管,但是每次从键空间中获取键时,都检查取得的键是否过期,如果过期的话,就删除改键,如果没有过期,就返回该键。在设置键的过期时间的同时,创建一个定时器,让定时器在键的过期时间来临时,立即执行对键的删除操作。每隔一段时间,程序就对数据库进行一次检查,删除里面的过期键。...原创 2022-08-09 11:52:57 · 117 阅读 · 0 评论 -
【Redis】对象
字符串对象值相对更加复杂,而一个共享对象保存的值越复杂,验证共享对象和目标对象是否相同所需的复杂度就会越高,消耗的CPU时间也会越多,因此,尽管共享更复杂的对象可以节约更多的内存,但受到CPU时间的限制,Redis只对包含整数值的字符串对象进行共享。Redis会在初始化服务器时,创建一万个字符串对象,这些对象包含了从0到9999的所有整数值,当服务器需要用到值为0到9999的字符串对象时,服务器就会使用这些共享对象,而不是新对象。字符串对象是Redis五种类型的对象中唯一一种会被其它四种对象嵌套的对象。..原创 2022-08-09 11:50:15 · 356 阅读 · 0 评论 -
【Redis】跳跃表、整数集合与压缩列表
如果在一个多个连续的、长度介于250字节到253字节之间的节点e1至eN的压缩列表中将一个长度大于等于254字节的新节点new设置为压缩列表的表头结点,那么程序就会不断地对压缩列表执行空间重分配操作,直至eN为止。只要我们拥有了一个指向某个节点起始地址的指针,那么通过这个指针以及这个节点的previous_entry_length属性,程序就可以一直向前一个节点回溯,最终到达压缩列表的表头结点。,成员对象较小的节点会排在前面(靠近表头的方向),而成员对象较大的节点则会排在后面(靠近表尾的方向),...原创 2022-08-09 11:45:19 · 306 阅读 · 0 评论 -
【Redis】简单动态字符串、链表与字典
SDS遵循C字符串以空字符结尾的惯例,保存空字符的1字节空间不计算在SDS的len属性中,并且为空字符分配额外的1字节空间,这么做的好处是SDS可以直接重用一部分C字符串函数库里面的函数。原创 2022-08-09 11:39:44 · 294 阅读 · 0 评论