![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
redis设计与实现
qq_33296156
这个作者很懒,什么都没留下…
展开
-
单机数据库的实现----------01数据库
可以使用select +数值来切换数据库redis>select 1OK数据库使用过期字典来记录过期时间和对象过期的删除策略1.定时删除:在设置过期的时候,创建一个定时器(浪费cpu时间)2.惰性删除,过期时间不管,每次取键时,判断是否过期(浪费内存,如果有大量的key过期但是没有被访问到,会导致内存泄漏)3.定期删除,每个一段时间,程序自动检测red...转载 2018-08-31 09:06:24 · 1256 阅读 · 0 评论 -
数据结构与对象----------06压缩列表
zlbytes:占4个字节,记录整个压缩列表占用的内存字节数。 zltail_offset:占4个字节,记录压缩列表尾节点entryN距离压缩列表的起始地址的字节数。 zllength:占2个字节,记录了压缩列表的节点数量。 entry[1-N]:长度不定,保存数据。 zlend:占1个字节,保存一个常数255(0xFF),标记压缩列表的末端。假设这是一个压缩列表的头两个节点,因此:...转载 2018-08-30 15:32:38 · 109 阅读 · 0 评论 -
数据结构与对象----------05整数集合
整数集合是只包含整数值的集合转载 2018-08-30 15:03:22 · 94 阅读 · 0 评论 -
数据结构与对象----------04跳跃表
跳跃表:redis只在两个地方用到了跳跃表,一个式有序集合键,另一个是在集群节点用作内部数据结构下面给出跳跃表的图:redis中的跳跃表 实际上没什么大的区别,只是为了方便,保存了一些信息header:指向跳跃表的表头节点tail:指向跳跃表的表尾节点level。记录跳跃表最大的那个节点的层数(redis中最高有64层,那么实际上要找到一个数,只需要从当前记录的...转载 2018-08-30 14:55:41 · 117 阅读 · 0 评论 -
数据结构与对象----------02链表
链表在Redis中应用非常广泛,比如列表键的底层实现之一就是链表,还有发布订阅,慢查询,监视器等也用到了链表转载 2018-08-30 13:47:55 · 116 阅读 · 0 评论 -
数据结构与对象---------01字符串
再Redis中,字符串是由SDS实现的例如:redis>SET msg "hello world"OK那么Redis将再数据库中创建一个新的键值对,其中:键值对的键是一个字符串的对象,底层实现的保存着字符串“msg”的SDS键值对的值也是一个字符串对象,底层实现的保存着字符串“hello world”的SDSSDN的定义:对比C字符串,SDS具有以下优点:...转载 2018-08-30 11:50:27 · 116 阅读 · 0 评论 -
数据结构与对象----------03字典
也就是说字典用hash实现,在正常的hash的数组中,每个数对应的hash值,存放的就是一条链表而字典在数组和链表中存储了一个dictEntry,相当于在计算出hash值后,还要计算出索引值,才能往对应的链表中插入数据注意:插入的时候总是插入在链表的最前面,这样就不用遍历链表字典注意被应用在数据库和哈希键redis中每个字典带有两个哈希表,一个平时使用,一个仅在rehash(渐...转载 2018-08-30 14:23:23 · 117 阅读 · 0 评论 -
单机数据库的实现----------04事件
1.文件事件:使用i/o多路复用假设一个redis客户端发起连接,那么监听嵌套字将产生AE_READABLE事件,触发应答处理器,处理器对客户端的连接请求进行应答,然后创建客户端嵌套字及客户端状态,并将嵌套字的AE_READABLE事件与命令请求处理器关联,然后客户端向服务器发送命令请求(嵌套字) 当客户端尝试读取命令回复时,触发命令回复处理器,当命令客户端嵌套字的AE_WRITABLE...转载 2018-08-31 10:59:24 · 625 阅读 · 0 评论 -
多机数据库的实现----------01复制(主从服务器)
redis的复制功能包括:同步和命令传播同步:是将从服务器的数据库状态更新与主服务器当前所处的数据库状态 命令传播:当主服务器的数据库状态被修改,导致主从不一致,让主从重新一致同步:当客户端向服务器发送slaveof命令,(假设现在有127.0.0.1:12345和127.0.0.1:6379两个服务器)127.0.0.1:12345>SLAVEOF 127.0.0.1 63...转载 2018-08-31 11:51:07 · 176 阅读 · 0 评论 -
独立功能的实现----------02慢查询日志和监视器
Redis的慢查询日志(先进先出的定长队列)用于记录执行超过给定时长的命令请求,服务器配置有两个和慢查询日志相关的选项:slowlog-log-slower-tan 指定超过多少秒会被记录到日志上 slowlog-max-len 指定服务器最多保存多少条 客户端发送MONITOR命令让普通客户端成为监视器...转载 2018-08-31 15:07:03 · 116 阅读 · 0 评论 -
独立功能的实现----------01排序
1.SORT:SORT <key> [ASC ,DESC,ALPHA,LIMIT,STORE,BY,GET]SORT对值进行排序redis>RPUSH number 3 1 2(integer) 3redis>SORT number1) "1"2) "2"3) "3"使用ALPHA选项,SORT <key> ALPHA 对对字符串的..转载 2018-08-31 14:57:38 · 97 阅读 · 0 评论 -
多机数据库的实现----------03集群
通常,为了提高网站响应速度,总是把热点数据保存在内存中而不是直接从后端数据库中读取。Redis是一个很好的Cache工具。大型网站应用,热点数据量往往巨大,几十G上百G是很正常的事儿。由于内存大小的限制,使用一台 Redis 实例显然无法满足需求,这时就需要使用 多台 Redis (集群)作为缓存数据库。才能在用户请求时快速的进行响应。 Redis集群是Redis提供的分布式数据库...转载 2018-08-31 14:35:13 · 303 阅读 · 0 评论 -
多机数据库的实现----------02Sentinel(哨兵)
Sentinel是Redis的高可用性的解决方案:有一个或多个Sentinel实例组成的系统可以监视任意多个主服务器和下属从服务器,当主服务器下线时(超过设置的时间),会自动选中一个从服务器变成主服务器,当原先的主服务器上线时,变成现在主服务器的从服务器Sentinel本质上就是运行在特殊环境下的Redis服务器,没有RDB和AOFSentinel会默认以10秒一次的频率向主服...转载 2018-08-31 13:54:16 · 245 阅读 · 0 评论 -
单机数据库的实现----------03AOF
与RDB通过记录数据库的键值对来记录数据库状态不同,AOP持久化是通过保存Redis服务器执行的命令AOP持久化的实现分为命令追加(append),文件写入,文件同步三个步骤服务器执行往一个命令后,会追加到aop_buf缓冲区的末尾在现代操作系统中,当用户调用write函数将数据写入文件中,通常会保存在内存缓冲区中,等到缓冲区满,或超过指定时间才真正写入磁盘数据库只要重启的时候...转载 2018-08-31 09:06:34 · 202 阅读 · 1 评论 -
数据结构和对象----------07对象
redis使用前面的数据结构构建了5中对象(redis5.0以前),字符串对象,列表对象,哈希对象,集合对象,有序集合对象对象的定义对象的类型对象的命令输出对象的编码5种对象的命名实现 重点总结:redis的每个键值对的键和值都是对象 reid总共有5种类型的对象,每种类型的对象至少有两种或以上的编码方式(即实现...转载 2018-08-30 15:59:04 · 164 阅读 · 0 评论