
Redis
从Redis的基本操作到深入理解Redis设计实现
yaluoshan
程序员
展开
-
Redis笔记(14):AOF持久化
除了RDB持久化功能之外,Redis还提供了AOF(Append Only File)持久化功能。与RDB持久化通过保存数据库中的键值对来记录数据库状态不同,AOF持久化是通过保存Redis服务器所执行的写命令来记录数据库状态的。被写入AOF文件的所有命令都是以Redis的命令请求协议格式保存的,因为Redis的命令请求协议是纯文本格式的。在这个AOF文件里面,除了用于指定数据库的SELECT命令是服务器自动添加的之外,其他都是我们之前通过客户端发送的命令。服务器在启动时,如果开启了AOF功能,可以通过载原创 2020-11-16 10:15:56 · 92 阅读 · 0 评论 -
Redis笔记(13):RDB持久化
Redis是内存数据库,它将自己的数据库状态储存在内存里面,一旦服务器进程退出,服务器中的数据库状态也会消失不见。为了解决这个问题,Redis提供了RDB持久化功能,将Redis在内存中的数据库状态保存到磁盘里面,避免数据意外丢失。RDB持久化既可以手动执行,也可以根据服务器配置选项定期执行。RDB持久化功能所生成的RDB文件是一个经过压缩的二进制文件,通过该文件可以还原生成RDB文件时的数据库状态。1.RDB文件的创建与载入(1)创建RDB文件SAVE、BGSAVE可以用于生成RDB文件,SAVE命原创 2020-11-16 10:15:36 · 137 阅读 · 0 评论 -
Redis笔记(12):服务端实现
Redis服务器负责与多个客户端建立网络连接,处理客户端发送的命令请求,在数据库中保存客户端执行命令所产生的数据,并通过资源管理来维持服务器自身的运转。1.命令请求的执行过程(1)发送命令请求当用户在客户端中键入一个命令请求时,客户端会将这个命令请求转换成协议格式,然后通过连接到服务器的套接字,将协议格式的命令请求发送给服务器,过程如图所示。(2)读取命令请求当客户端与服务器之间的连接套接字因为客户端的写入而变得可读时,服务器将调用命令请求处理器来执行以下操作:1)读取套接字中协议格式的命令请原创 2020-11-15 12:37:23 · 169 阅读 · 0 评论 -
Redis笔记(11):客户端实现
Redis服务器是典型的一对多服务器程序,一个服务器可以与多个客户端建立网络连接,通过使用I/O多路复用技术实现的文件事件处理器,Redis服务器使用单线程的方式来处理命令请求,并与多个客户端进行网络通信。对于每个与服务器进行连接的客户端,服务器都为这些客户端建立redis.h/redisClient结构(客户端状态),保存了客户端当前的状态信息。Redis服务器状态结枃的clients属性是一个链表,这个链表保存了所有与服务器连接的客户端的状态结构,对客户端执行批量操作,或者査找某个指定的客户端,都可以原创 2020-11-15 12:35:03 · 236 阅读 · 0 评论 -
Redis笔记(10):事件
Redis服务器是一个事件驱动程序,服务器需要处理文件事件、时间事件两类事件。文件事件(file event): Redis服务器通过套接字与客户端(可以是其他Redis服务器)进行连接,文件事件就是服务器对套接字操作的抽象。服务器与客户端的通信会产生相应的文件事件,而服务器则通过监听并处理这些事件来完成一系列网络通信操作。时间事件(time event): Redis服务器中的一些操作(比如serverCron函数)需要在给定的时间点执行,而时间事件就是服务器对这类定时操作的抽象。1.文件事件Re原创 2020-11-15 12:33:42 · 186 阅读 · 0 评论 -
Redis笔记(9):Redis单机数据库的实现
1.数据库结构Redis服务器将所有数据都保存在服务器状态redis.h/redisServer结构的db数组中,db数组的每个元素都是一个redis.h/redisDb结构,每个redisDb结构代表一个数据库,在初始化服务器时,程序会根据服务器状态的dbnum属性来决定应该创建多少个数据库。dbnum属性的值由服务器配置的database选项决定,默认为16。struct redisServer{ // 一个数组,保存着服务器中的 redisDb *db; // 服务器的数据原创 2020-11-15 12:31:59 · 132 阅读 · 0 评论 -
Redis笔记(4):字符串对象的结构与实现
1.字符串与SDS(1)字符串的实现方式Redis没有直接使用C语言的字符串表示(以空字符结尾的字符数组),而是自己构建了一种名为简单动态字符串(Simple Dynamic String,SDS)的抽象类型,并将SDS用作Redis的默认字符串实现,字符串的值最大不能超过512MB。。在Redis里面,C字符串只会作为字符串字面量用在一些无须对字符串值进行修改的地方,比如打印日志。当Redis需要的是一个可以被修改的字符串值时,Redis就会使用SDS来表示字符串值,比如在Redis的数据库里面,包原创 2020-11-15 12:28:17 · 129 阅读 · 0 评论 -
Redis笔记(5):列表对象的结构与实现
1.压缩列表压缩列表(ziplist)是列表键和哈希键的底层实现之一,当一个列表键只包含少量列表项,并且每个列表项要么就是小整数值,要么就是长度比较短的字符串,那么Redis就会使用压缩列表来做列表键的底层实现。当一个哈希键只包含少量键值对,并且每个键值对的键和值是小整数值或短字符串,那么Redis就会使用压缩列表来做哈希键的底层实现。(1)压缩列表的构成压缩列表是Redis为了节约内存而开发的,是一种由一系列特殊编码的连续内存块组成的顺序型数据结构。一个压缩列表可以包含任意多个节点(entry),每原创 2020-11-15 12:27:21 · 93 阅读 · 0 评论 -
Redis笔记(6):哈希对象的结构与实现
C语言并没有内置字典这种数据结构,因此Redis构建了自己的字典实现。Redis的哈希对象使用哈希表作为底层实现,一个哈希表里面可以有多个哈希表节点,而每个哈希表节点就保存了字典中的一个键值对。1.字典的结构(1)字典(dict)type属性和private属性是针对不同类型的键值对,为创建多态字典而设置的。type属性是一个指向dicType结构的指针,每个dicType结构保存了一簇用于操作特定类型键值对的函数,Redis会为用途不同的字典设置不同的类型特定函数。private属性则保存了需原创 2020-11-15 12:26:31 · 178 阅读 · 0 评论 -
Redis笔记(7):集合对象的结构与实现
1.整数集合整数集合(intset)是Redis用于保存整数值的集合抽象数据结构,它可以保存类型为int16_t、int32_t或者int64_t的整数值,并且保证集合中不会出现重复元素。整数集合的结构如下:encoding属性决定contents数组的具体类型。length属性记录了整数集合包含的元素数量,也即是contents数组的长度。contents数组是整数集合的底层实现,整数集合的每个元素都是contents数组的一个数组项,各个项在数组中按值的大小从小到大有序地排列,并且数组中不包原创 2020-11-15 12:25:23 · 100 阅读 · 0 评论 -
Redis笔记(8):有序集合对象的结构与实现
1.跳跃表跳跃表(skiplist)是一种有序数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。跳跃表支持**平均O(logN)、最坏O(N)**复杂度的节点查找,还可以通过顺序性操作来批量处理节点。在大部分情况下,跳跃表的效率可以和平衡树相媲美,并且因为跳跃表的实现比平衡树要来得更为简单,所以有不少程序都使用跳跃表来代替平衡树。跳表的查找:跳表的插入:先确定该元素要占据的层数K(由随机算法产生),然后在Level 1到Level K各个层的链表都插入元素。随机算原创 2020-11-15 12:24:15 · 299 阅读 · 0 评论 -
Redis笔记(2):Redis基础数据结构
Redis有5种基础数据结构,分别为:string(字符串)、list(列表)、set(集合)、hash(哈希)和zset(有序集合)。Redis所有的数据结构都是以唯一的key字符串作为名称,key的类型可以是整型、浮点型、字符串,然后通过这个唯一key值来获取相应的value数据。不同类型的数据结构的差异就在于value的结构不一样。1.string(字符串)字符串结构使用非常广泛,一个常见的用途就是缓存用户信息。我们将用户信息结构体使用JSON序列化成字符串,然后将序列化后的字符串塞进Redis来原创 2020-11-15 12:20:10 · 268 阅读 · 0 评论 -
Redis笔记(3):Redis对象的结构与特性
1、Redis对象的结构与特性Redis基于SDS、双端链表、字典、压缩列表、整数集合等数据结构创建了一个对象系统,这个系统包含字符串对象、列表对象、哈希对象、集合对象和有序集合对象这五种类型的对象,每种对象都用到了至少一种上述数据结构。通过这五种不同类型的对象,Redis可以在执行命令之前,根据对象的类型来判断一个对象是否可以执行给定的命令。使用对象的另一个好处是,可以针对不同的使用场景,为对象设置多种不同的数据结构实现,从而优化对象在不同场景下的使用效率。1.对象的结构Redis使用对象来表示数据原创 2020-10-17 14:40:37 · 144 阅读 · 0 评论 -
Redis笔记(1):Redis特性与安装
1、Redis简介Redis是互联网技术领域使用最为广泛的存储中间件,它是Remote Dictionary Service的首字母缩写,也就是远程字典服务,Redis使用C语言实现。Redis以其超高的性能、完美的文档、简洁易懂的源码和丰富的客户端库支持在开源中间件领域广受好评。原创 2020-10-13 10:10:59 · 133 阅读 · 1 评论