
Redis
顺其自然SLXYSYC
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
chapter7 压缩列表
压缩列表(ziplist)是列表键和哈希键的底层实现之一。当一个列表键只包含少量列表键,并且每个列表项要么就是小整数值,要么就是长度比较短的字符串,那么Redis就会使用压缩列表来做列表键的底层实现。 另外,当一个哈希键只包含少量键值对,并且每个键值对的键和值要么就是小整数值,要么就是长度比较短的字符串,那么Redis就会使用压缩列表来做哈希键的底层实现。7.1 压缩列表的构成 ...原创 2018-03-22 15:57:42 · 211 阅读 · 0 评论 -
chapter14 服务器
一个命令请求从发送到获得回复的过程中,客户端和服务器需要完成一系列操作。举个例子,如果我们使用客户端执行以下命令:redis> SET KEY VALUE OK那么从客户端发送 SET KEY VALUE 命令到获得回复 OK 期间,客户端和服务器共需要执行以下操作:客户端向服务器发送命令请求 SET KEY VALUE 。服务器接收并处理客户端发来的命令请求 SET KEY VALUE ,...原创 2018-03-28 15:11:15 · 305 阅读 · 0 评论 -
chapter13 客户端
Redis服务器是典型的一对多服务器程序:一个服务器可以与多个客户建立网络连接,每个客户端可以向服务器发送命令请求,而服务器则接收并处理客户端发送的命令请求,并向客户端返回命令回复。 通过使用由I/O多路复用技术实现的文件事件处理器,Redis服务器使用单线程单进程的方式来处理命令请求,并与多个客户端进行网络通信。13.1 客户端属性客户端状态包含的属性可以分为两类:一类是比较通用的...原创 2018-03-28 10:05:49 · 260 阅读 · 0 评论 -
chapter6 整数集合
6.1 整数集合的实现 整数集合(intset)是Redis用于保存整数值的集合抽象数据结构,它可以保存类型为int16_t,int32_t或者int64_t的整数值,并且保证集合中不会出现重复元素。 每个intset.h/intset结构表示一个整数集合:typedef struct intset{ // 编码方式 uint32_t encoding; // 集合包含的元...原创 2018-03-22 12:22:26 · 215 阅读 · 0 评论 -
chapter5 跳跃表
跳跃表(skiplist)是一种有序数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。 跳跃表支持平均O(logN),最坏O(N)复杂度的节点查找,还可以通过顺序性操作来批量处理节点。 在大部分情况下,跳跃表的效率可以和平衡树相媲美,并且因为跳跃表的实现比平衡树要来的更为简单,所以有不少程序都使用跳跃表来代替平衡树。 Redis使用跳跃表...原创 2018-03-21 23:56:39 · 284 阅读 · 0 评论 -
chapter4 字典
字典,又称为符号表(symbol table),关联数组(associative array)或映射(map),是一种用于保存键值对(key-value pair)的抽象数据结构。 在字典中,一个键(key)可以和一个值(value)进行关联(或者说将键映射为值),这些关联的键和值就称为键值对。 字典在Redis中的应用相当广泛,比如Redis的数据库就是使用字典作为底层实现的...原创 2018-03-21 22:40:00 · 204 阅读 · 0 评论 -
chapter12 事件
Redis服务器是一个事件驱动程序,服务器需要处理以下两类事件:文件事件(file event):Redis服务器通过套接字与客户端(或者其他Redis服务器)进行连接,而文件事件就是服务器对套接字操作的抽象。时间事件(time event):Redis服务器中的一些操作(比如serverCron函数)需要在给定的时间点执行,而时间事件就是服务器对这类定时操作的抽象。12.1 文件事件 Re...原创 2018-03-26 00:33:06 · 314 阅读 · 0 评论 -
chapter3 链表
作为一种常用的数据结构,链表内置在很多高级的编程语言里面,因为Redis使用的C语言并没有内置这种数据结构,所以Redis构建了自己的链表实现。 链表在Redis中的应用非常广泛,比如列表键的底层实现之一就是链表。当一个列表键包含了数量比较多的元素,又或者列表中包含的元素都是比较长的字符串时,Redis就会使用链表作为列表键的底层实现。 举个例子,以下展示的integers列表...原创 2018-03-21 19:48:59 · 178 阅读 · 0 评论 -
chapter11 AOF持久化
除了RDB持久化功能之外,Redis还提供了AOF(Append Only File)持久化功能。与RDB持久化通过保存数据库中的键值对来记录数据库状态不同,AOF持久化是通过保存Redis服务器所执行的写命令来记录数据库状态的,如图11-1所示。 举个例子,如果我们对空白数据库执行以下命令,那么数据库中将包含三个键值对:redis>set msg "hello" OK red...原创 2018-03-25 18:34:44 · 225 阅读 · 0 评论 -
chapter10 RDB持久化
Redis是一个键值对数据库服务器,服务器中通常包含着任意个非空数据库,而每个非空数据库中又可以包含任意个键值对,为了方便起见,我们将服务器中的非空数据库以及它们的键值对统称为数据库状态。 举个例子,图10-1展示了一个包含三个非空数据库的Redis服务器,这三个数据库以及数据库中的键值对就是该服务器的数据库状态。 因为Redis是内存数据库,它将自己的数据库状态储存在内存里面...原创 2018-03-25 12:05:15 · 246 阅读 · 0 评论 -
chapter2 简单动态字符串
http://blog.youkuaiyun.com/andrewlee_/article/details/70036755 Redis没有直接使用C语言传统的字符串表示(以空字符结尾的字符数组,以下简称C字符串),而是自己构建了一种名为简单动态字符串(simple dynamic string,SDS)类型,并将SDS作为Redis的默认字符串表示。 在Redis里面,C字符串只会作为字符串字面...原创 2018-03-21 01:53:25 · 257 阅读 · 0 评论 -
chapter9 数据库
9.1 服务器中的数据库 Redis服务器将所有数据库都保存在服务器状态redis.h/redisServer结构的db数组中,db数组的每个项都是一个redis.h/redisDb结构,每个redisDb结构代表一个数据库:struct redisServer { // ... // 一个数组,保存着服务器中的所有数据库 redisDb *db; // ... }; ...原创 2018-03-25 00:38:33 · 338 阅读 · 0 评论 -
chapter16 Sentinel
Sentinel(哨岗,哨兵)是redis高可用性(high availability)解决方案:有一个或多个Sentinel实例(instance)组成的Sentinel系统(system)可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器,然后由新的主服务器代替已下线的主服务器继续处理...原创 2018-03-30 09:46:35 · 221 阅读 · 0 评论 -
chapter8 对象
Redis并没有直接使用这些数据结构来实现键值对数据库,而是基于这些数据结构创建了一个对象系统,这个系统包含字符串对象、列表对象、哈希对象、集合对象和有序集合对象这五种类型的对象,使用对象的一个好处是,我们可以针对不同的使用场景,为对象设置多种不同的数据结构实现,从而优化对象在不同场景下的使用效率。 除此之外,Redis的对象还实现了基于引用计数技术的内存回收机制,当程序不再使用某个...原创 2018-03-22 18:45:48 · 225 阅读 · 0 评论 -
chapter15 复制
15.1 旧版复制功能的实现Redis 的复制功能分为同步(sync)和命令传播(command propagate)两个操作:其中,同步操作用于将从服务器的数据库状态更新至主服务器当前所处的数据库状态。而命令传播操作则用于在主服务器的数据库状态被修改,导致主从服务器的数据库状态出现不一致时,让主从服务器的数据库重新回到一致状态。15.1.1 同步当客户端向从服务器发送 SLAVEOF 命令,要求...原创 2018-03-29 11:50:43 · 348 阅读 · 0 评论