
Redis笔记
何以慰風塵
本愿一心向胡马,奈何胡马奔沟渠
展开
-
Redis(一) 简单动态字符串SDS
一.概述 在Redis中只将C字符串用于一些无需对字符串值进行修改的地方(常量),如日志打印,而其它需要修改(比如底层的键-值对存储)的地方都使用了自己构建的SDS(简单动态字符串)进行存储。 二.SDS结构 SDS是一种对C字符串的封装,其结构体如下:struct sdshdr{ // 记录buf数组中已使用的字节数(不含末尾的空字节'\0')...原创 2019-01-07 16:20:27 · 216 阅读 · 0 评论 -
redis(十二)Sentinel
一.概述redis使用哨兵系统保证redis的稳定性与可靠性。每个哨兵系统由一个或多个sentinel实例组成,每个哨兵系统都可以监视任意多个主服务器,以及其属下的从服务器,并在主服务器下线时(如由于网络异常等导致主服务器掉线),自动将下线主服务器属下的某个从服务器升级为新的主服务器,以代替下线主服务器处理命令请求。当下线的主服务器重新上线时,会成为新主服务器的从服务器。二.Sent...原创 2019-07-17 11:19:51 · 332 阅读 · 0 评论 -
redis(十一) 服务器的复制
一.复制的概念当执行SLAVEOF命令时,那么发送复制命令的服务器将复制接收该命令的服务器,之后这两个服务器将保存相同的数据。我们称被复制的服务器为主服务器,而对主服务器进行复制的服务器称为从服务器。二.旧版复制功能1.总体过程总体复制过程由两部分组成。第一部分称为同步,用于将从服务器状态更新至主服务器的当前状态,即同步用于达到一致状态。第二部分称为命令传播,用于当主服务器状...原创 2019-07-04 18:56:35 · 479 阅读 · 0 评论 -
Redis(十)Redis的事件循环
【源码位置】:redis中关于事件循环的API位于ae.h及ae.c文件中一.文件事件1.什么是文件事件redis中将套接字和管道产生的通信事件称为文件事件,并使用事件回调处理这些文件事件,如可读回调,可写回调,连接成功回调等等。2.文件事件结构redish中每个文件事件都以一个aeFileEvent结构表示,其结构如下所示:typedef void aeFileProc...原创 2019-07-03 15:35:08 · 373 阅读 · 0 评论 -
Redis(九) AOF持久化介绍及部分源码解析
一.概述 AOF持久化不同于RDB的存储整个数据结构,AOF是通过记录redis执行的服务器所执行的写命令来记录数据库状态的。二.AOF持久化的实现 AOF持久化操作分为三个步骤,分别是:命令追加,文件写入,文件同步。具体如下:redis在每次执行写命令时(比如增删改),都会将该条命令加入到服务器结构redisServer的AOF缓冲区中,redis向muduo一样是...原创 2019-03-06 14:51:55 · 785 阅读 · 0 评论 -
Redis(八)RDB持久化介绍及部分源码解析
一.概述 由于Redis数据库是在内存中进行操作的,当出现意外时,内存中的数据将会丢失,因此需要进行持久化操作,所谓持久化操作即将内存中的数据库通过某种方式保存到磁盘中,Redis有两种存储方式,一个是RDB文件,另一种是AOF文件,一般会优先使用AOF。本篇博文介绍的是RDB持久化文件,RDB是一种压缩的二进制文件,它保存了某一时刻下内存中的数据库。二.RDB文件的创建与载入1...原创 2019-03-04 19:23:40 · 321 阅读 · 0 评论 -
Redis(五)压缩列表介绍及部分源码解析
一.概述 压缩列表(ziplist)是列表和哈希对象中用于存储数据的底层实现之一,一般用于存储少量数据,且元素大小较小,如:较小整数,较短字符串,因为压缩列表可以使用较少的内存存储多种不同类型的数据,且有着平均性能为O(N)的增删性能。二.压缩列表结构 一个压缩列表可以包含任意多个节点,其总体结构为:列表头 + 数据节点 + 列表尾节点(不含数据)。列表...原创 2019-01-17 09:57:20 · 226 阅读 · 0 评论 -
Redis(七)数据库介绍及部分源码解析
一.服务器与数据库结构概述Redis服务器以struct redisServer结构表示,其中以一些成员一起维护了服务器属的数据库,如:用于存储描述数据库结构(redisDB)的数组,数组大小等等,如下图所示:// 服务器结构struct redisServer{ //... redisDb *db; // 数据库数组 int dbnum; // 数据库数...原创 2019-02-02 14:45:51 · 219 阅读 · 0 评论 -
Redis(四)整数集合介绍及源码解析
一.概述 整数集合(intset)与hash表,跳跃表等一样是集合键的底层实现之一,一般用于保存数量不多的整数,这是由于其实现机制导致的不能存储过多元素,否则会造成效率问题。集合键的内部结构可以使用Redis命令OBJECT ENCODING获取二.整数集合结构 整数集合可以用于保存int16_t,int32_t或int64_t的整数值,并且从小到大排序且保证不...原创 2019-01-15 20:40:03 · 357 阅读 · 0 评论 -
Redis(三)跳跃表介绍及源码
一.理想跳跃表 查询链表的时间复杂度O(n),即使该链表的是有序的,但若我们在链表上在加一层链,且每次跳过一个节点(即进行一次二分),如下图所示: 如此一来,从L2链开始搜索,要查询8只需4次即可,而查询7时,在搜锁到节点6后可知下一个节点8大于7因此必在节点6和节点8之间,从而进入L1链继续查询,总共需4次即可。 若在L2链的基础上增加一层链...原创 2019-01-10 18:18:51 · 494 阅读 · 0 评论 -
Redis(二)字典介绍及部分源码刨析
一.概述 Redis中使用字典这种数据结构作为数据库的底层实现,对数据库的增删改查也是基于对字典的操作之上进行的,当进行持久化时再将字典中的数据保存至磁盘中。二.Redis中的字典结构 Redis中的字典是使用hashtable实现的,因为当hash表的负载因子不高且hash算法可以较均匀分配时,hashtable可以在常数时间内查找到数据,且若采用链式地址法处理...原创 2019-01-09 16:43:26 · 179 阅读 · 0 评论 -
Redis(六)redis对象介绍及部分源码解析
一.概述 Redis中包含各种数据结构,但为了提高灵活性,针对不同的情况下选择合适的数据结构,Redis在数据结构之上增加了一层对象系统,其中包括五种对象类型:字符串对象,列表对象,哈希对象,集合对象和有序集合对象。每种对象可以根据情况自动选择和更改底层数据结构,以提高效率及空间利用率,比如:列表对象可以使用压缩列表实现,亦可使用双向链表实现。Redis中使用结构体redisObje...原创 2019-01-31 21:32:22 · 180 阅读 · 0 评论 -
redis(十三)集群
一.概述redis集群是Redis提供的分布式数据库方案,它通过将数据进行分片存储来实现,并提供复制和故障转移功能。redis集群由多个节点组成,每个节点都是一个运行在集群模式下的redis服务器。二.集群的节点1.节点redis集群中的每个节点都是一个运行在集群模式下的redis服务器,redis服务器在启动时会根据cluster-enabled配置选项是否为yes来决定是...原创 2019-07-22 15:07:54 · 185 阅读 · 0 评论