今天来聊聊redis当中的对象感觉需要补充的有三部分:1. 内存回收由于C语言并不具备自动内存回收功能,所以redis在自己的对象系统中构建了一个引用计数来实现内存回收,通过这一机制,程序可以通过跟踪对象的引用计数信息,在适当的时候自动释放对象并进行内存回收。当新建一个对象时,引用计数的值会初始化为1;当对象被一个新程序使用时,引用计数+1, 当对象不……继续阅读 » 海叔叔 4年前 (2021-08-28) 26浏览 0评论0个赞
redis服务器将所有数据库都保存在服务器状态redisServer结构的db数组中,db数组的每个项都是一个redisDb机构,每个redisDb结构代表一个数据库struct redisServer{ //.... redisDb *db; int dbnum; //....};typedef str……继续阅读 » 海叔叔 4年前 (2021-08-28) 32浏览 0评论0个赞
aof持久化是通过保存服务器所执行的写命令来记录数据库状态的。它的实现可以分为命令追加、文件写入、文件同步三个步骤1. 命令追加当aof持久化功能处于打开状态时,服务器在执行完一个写命令之后,会以协议格式将被执行的写命令追加到服务器状态的aof_buf缓冲区的末尾struct <a href="https://www.gaodai……继续阅读 » 海叔叔 4年前 (2021-08-28) 17浏览 0评论0个赞
之前讲了aof,今天来讲讲rdb。rdb简单来说就是将redis存在内存中的数据形成快照,持久化到硬盘,这里跟aof是不一样的,aof是将命令逐个写入,方便后面replay,这里是直接写入数据。有两个Redis命令可以用于生成rdb文件,一个是SAVE,另一个是BGSAVE。前者会阻塞redis服务器进程,直到RDB文件创建完毕为止,在服务器阻塞期间,服……继续阅读 » 海叔叔 4年前 (2021-08-28) 34浏览 0评论0个赞
redis服务器是一个事件驱动程序,服务器需要处理一下两类事件:1. 文件事件(file event):redis服务器通过套接字与客户端(或者其他redis服务器)进行连接,而文件事件就是服务器对套接字操作的抽象2. 时间事件(time event):redis服务器中的一些操作需要在给定时间点执行,而时间事件就是服务器对这类定时操作的抽象。文件事件……继续阅读 » 海叔叔 4年前 (2021-08-28) 24浏览 0评论0个赞
redis服务器是典型的一对多服务器程序:一个服务器可以与多个客户端建立网络连接,每个客户端可以向服务器发送命令请求,而服务器则接收并处理客户端发送的命令请求,并向客户端返回命令回复。redis服务器使用单线程单进程的方式来处理命令请求,并与多个客户端进行网络通信。对于每一个与服务器进行连接的客户端,服务器都为这些客户端建立了响应的redisClient结……继续阅读 » 海叔叔 4年前 (2021-08-28) 65浏览 0评论0个赞
redis服务器中的serverCron函数默认每100毫秒执行一次,这个函数负责管理服务器的资源,并保持服务器自身的良好运转1. 更新服务器时间缓存为了减少系统调用获取当前时间,服务器状态中的unixtime属性和mstime属性被用作当前时间的缓存。只有在使用高精度时间的功能时,才会再次执行系统调用获取当前时间2. 更新LRU时钟(10s)服务器……继续阅读 » 海叔叔 4年前 (2021-08-28) 37浏览 0评论0个赞
在redis中,用户可以通过执行SLAVEOF命令或者设置slaveof选项,让一个服务器取复制另一个服务器。传统的复制由于在断连之后,仍旧将复制流程全部走一遍(主服务器保存rdb文件,传输文件,传输命令),导致效率低下;新版的复制在断线后,只执行在断线后没有同步的命令(从服务器发送PSYNC->主服务器发送+CONTINUE->同步命令)。其实现的原理……继续阅读 » 海叔叔 4年前 (2021-08-28) 52浏览 0评论0个赞
sentinel是redis的高可用性的解决方案,由一个或多个sentinel实例组成的sentinel系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态(下线时长超过用户设定的下线时长上限)时自动将下线主服务器属下的某个从服务器升级为新的主服务器,然后由新的主服务器代替已下线的主服务器继续处理命令请求。当一……继续阅读 » 海叔叔 4年前 (2021-08-28) 24浏览 0评论0个赞
redis集群是redis提供的分布式数据库方案,集群通过分片(sharding)来进行数据共享,并提供复制和故障转移功能节点一个redis集群通常由多个节点组成,在刚开始的时候,每个节点都是相互独立的,它们都处于一个只包含自己的集群当中,可以通过在配置选项中指定cluster-enabled来在启动的时候将一台单独服务器开启服务器的集群模式,也可以在启……继续阅读 » 海叔叔 4年前 (2021-08-28) 26浏览 0评论0个赞