摘要:概述 Redis服务器负责与客户端建立网络连接,之前的数据结构部分已经看过了,本章主要从下面三个方面讲解。 1.服务器执行命令的过程 2.serverCron函数的执行 3.服务器的初始化 服务器执行命令的过程 一个客户端请求命令的基本过程大致如下: 1.客户端发送请求命令给服务器,比如set ke
阅读全文
随笔分类 - redis
摘要:概述 Redis服务器负责与客户端建立网络连接,之前的数据结构部分已经看过了,本章主要从下面三个方面讲解。 1.服务器执行命令的过程 2.serverCron函数的执行 3.服务器的初始化 服务器执行命令的过程 一个客户端请求命令的基本过程大致如下: 1.客户端发送请求命令给服务器,比如set ke
阅读全文
摘要:概述 对于每个与服务器连接的客户端,服务器都为它创建相应的redisClient的数据结构,并保持了相应的状态。Redis Server通过一个链表来保存所有的客户端连接。 本章包括: 客户端数据结构介绍; 客户端的创建与关闭 数据结构 先来看下redisClient中的数据结构: 客户端创建与关闭
阅读全文
摘要:概述 Redis服务器是一个事件驱动器,服务器需要处理以下两类事件: 文件事件:Redis服务器通过套接字与客户端进行通信,而文件事件就是服务器对套接字操作的抽象。 时间事件:Redis服务器需要定期的执行一些操作,比如serverCron函数,时间操作就是对这类操作的抽象。 文件事件 Redis基
阅读全文
摘要:概述 Redis除了RDB方式提供持久化外,还提供了AOF的方式,和RDB保存数据库的键值对不同,AOF是记录数据库执行的命令来记录数据库状态的。当AOF开始时,Redis服务器加载时,会先检查AOF文件是否存在,如果存在,则加载AOF,否则加载RDB文件。本章主要分为: 1.AOF实现 2.AOF
阅读全文
摘要:概述 Redis为内存数据库,即所有的键值对信息保存在内存中,那么一旦服务器出现问题重启,内存中的数据就会没有了。所以Redis需要实现持久化,将内存中的数据持久化到硬盘,在重新启动后,又将硬盘中的数据加载到内存中。 RDB文件生成与载入 有两个命令可用于生成RDB文件,save和bgsave: S
阅读全文
摘要:概述 1.数据库结构 2.数据库键空间 3.键生存时间 4.持久化对过期键处理 5.数据库通知 1.数据库结构 Redis服务器将所有server状态都保存在数据结构中的db数组,服务器会根据dbnum来决定创建多个个数据库,默认为16个。 创建db后,如下所示: 同样的在redisClient的数
阅读全文
摘要:概述 前面几张介绍了一些Redis的数据结构,比如SDS,集合,字典等,但是Redis并不会直接使用这些数据结构来实现键值对数据库,而是基于这些数据结构创建了一个对象系统,这些对象包括字符串对象,列表对象,哈希对象,集合对象和有序集合对象。每种对象都用到了一种或多种前面介绍的数据结构。 通过不同类型
阅读全文
摘要:概述 1.intset概述 2.intset实现 3.intset升级 intset概述 整数集合是Redis集合键的底层实现之一,当值都为整数时,redis就会选择整数集合作为底层实现。 可以保存int16_t,int32_t,int64_t类型的整数值,并且集合中不会出现重复元素。 intset
阅读全文
摘要:概述 1.跳跃表的介绍 2.跳跃表的数据结构 跳跃表的介绍 跳跃表是一个有序的数据结构,通过在每个节点维护多个执行其他节点的指针,从而达到快速访问的目的。 在Redis中只有两个地方用到了跳跃表,一个是有序集合键,另一个是在集群节点作为Redis内部的数据结构。具体源码在本章不介绍了,感兴趣可以去查
阅读全文
摘要:概述 1.字典介绍 2.字典实现 3.字典API 字典介绍 Redis里面很多地方用到了字典,比如Redis数据库就是使用字典作为底层实现的,哈希键的底层实现也是使用的字典。Redis字典底层使用的哈希表来实现,每个哈希表节点就保存了一个键值对。hash表的原理可以参考java里面的hashmap介
阅读全文
摘要:概述 1.链表介绍 2.链表API 链表介绍 链表在Redis中的应用非常广泛,比如列表键list的底层实现就是使用的链表。除了列表键外,Redis的发布与订阅、慢查询、监视器等功能也用到了链表,Redis服务器本身还使用了链表来保存客户端连接状态,以后使用链表来构建客户端输出缓冲区。 链表在Red
阅读全文
摘要:概述 1.SDS介绍 2.SDS API 3.SDS与C的比较 SDS介绍 在C语言中,用来表达字符串的方式通常有两种, char *buf1="redis"; char buf2[]="redis"; 方式1,通过一个char指针指向一个字符串字面量,起内容无法改变,即无法通过buf1[1]='c
阅读全文
|