![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Redis
文章平均质量分 75
南祈鸣
这个作者很懒,什么都没留下…
展开
-
Redis——客户端与服务端底层结构属性
clients属性,一个链表,保存了所有与服务器连接的客户端的状态结构分为两类主要了解通用属性fd属性记录了客户端正在使用的套接字描述符:根据客户端类型的不同,fd属性的值可以是-1或者是大于-1的整数:默认情况下,一个连接到服务器的客户端是没有名字的CLIENT setname命令可以为客户端设置一个名字标志属性flags记录了客户端的角色(role)以及客户端目前所处的状态客户端状态的输入缓冲区用于保存客户端发送的命令请求:保存执行命令所得的命令回复每个客户端都有两个输出缓冲区,一个缓冲区大小是固定的,原创 2022-06-30 22:09:18 · 305 阅读 · 1 评论 -
Redis——Redis的专属事件
Redis服务器是一个事件驱动程序,服务器需要处理两类事件:正在上传…重新上传取消Redis基于Reactor模式开发了自己的网络事件处理器:文件事件处理器正在上传…重新上传取消正在上传…重新上传取消多个文件事件可能会并发地出现,但I/O多路复用程序总是会将所有产生事件的套接字都放到一个队列里面,通过这个队列,有序、同步、每次一个套接字的方式向文件事件分派器传送套接字正在上传…重新上传取消文件分派器根据套接字产生的事件的类型,调用相应的事件处理器事件处理器是一个个函数,定义了某个事件发生时,服务器应该执行的原创 2022-06-30 21:45:13 · 179 阅读 · 0 评论 -
Redis——AOF持久化
AOF通过保存Redis服务器所执行的写命令来记录数据库状态可以分为命令追加、文件写入、文件同步三个步骤当AOF持久化功能处于打开状态时,服务器执行完一个写命令之后,会以协议格式将被执行的写命令追加到服务器状态的aof_buf缓冲区的末尾Redis的服务器进程是一个事件循环,循环中的文件事件负责接收客户端的命令请求,以及向客户端发送命令回复,而时间事件负责执行像serverCron函数这样需要定时运行的函数服务器每次结束一个事件循环之前,它都会调用flushAppendOnlyFile函数,考虑是否需要将a原创 2022-06-30 21:37:39 · 155 阅读 · 0 评论 -
Redis——RDB文件与持久化
数据库状态:Redis服务器中的非空数据库以及它们的键值对因为Redis是内存数据库,需要办法将内存中的数据库状态保存到磁盘,否则服务器进程退出,服务器中的数据库状态也会消失不见RDB持久化既可以手动执行,也可以根据服务器配置选项定期执行两个Redis命令可以用于生成RDB文件,一个是SAVE,一个是BGSAVESAVE命令会阻塞Redis服务器进程BGSAVE命令会派生出一个子进程负责创建RDB文件BGSAVE命令执行期间,SAVE命令和BGSAVE命令会被服务器拒绝时间工作由rdb.c/rdbSave函原创 2022-06-30 21:29:50 · 267 阅读 · 0 评论 -
Redis——单机数据库的实现
Redis服务器将所有数据库都保存在服务器状态redis.h/redisServer结构的db数组中db数组的每个项都是一个redis.h/redisDb结构每个redisDb结构代表一个数据库在初始化服务器时,程序会根据服务器状态的dbnum属性来决定应该创建多少个数据库dbnum属性的值由服务器配置的database选项决定,默认情况下为16每个Redis客户端都有自己的目标数据库,每当客户端执行数据库读写命令时,目标数据库就是这些命令的操作对象默认情况下是0号数据库,客户端可以执行SELECT 命令来原创 2022-06-07 23:44:24 · 378 阅读 · 0 评论 -
Redis——Redis中的对象与编码需要合理的结合
Redis使用对象来表示数据库中的键和值,每当我们创建一个键值对,至少创建两个对象每个对象都由一个redisObject结构表示键总是一个字符串对象 encoding属性记录了对象所使用的编码,也就是这个对象使用了什么数据结构作为对象的底层实现 字符串对象的编码可以是int、raw或者embstr如果字符串对象保存的是整数值,并且这个整数值可以用long类型来表示,那么字符串对象会将整数值保存在字符串对象结构的ptr属性里,并将字符串对象的编码设置为int如果保存的是字符串值,并且这个字符串值的长度大原创 2022-06-05 20:05:54 · 87 阅读 · 0 评论 -
Redis——深入探究Redis中的数据结构
简单动态字符串(SDS)自己构建的抽象类型,SDS用作Redis的默认字符串表示C字符串用在打印日志这种无须对字符串值进行修改的地方SDS的定义SDS和C字符串的区别 有len,获取SDS长度的复杂度仅为O(1),C字符串需要遍历 SDS的API需要对SDS修改时,SDS会先检查SDS的空间是否满足修改所需的要求,不满足的话API会自动扩展SDS的空间,然后再执行,杜绝缓冲区溢出 SDS通过未使用空间实现了空间预分配和惰性空间释放两种优化策略,避免内..原创 2022-05-26 16:50:46 · 106 阅读 · 0 评论