
大魔王的睡前私语
文章平均质量分 86
与大家一起深入了解Redis的底层原理与实现过程
九千⑦
要么搞大。要么搞砸
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
redis之sentinel模式
redis哨兵模式,高可用集群部署模式原创 2022-06-08 21:13:41 · 1918 阅读 · 0 评论 -
Redis之事务篇
欢迎阅读大魔王的睡前私语系列,这是Redis第十篇文章事务Redis通过MULTI,EXEC,WATCH命令来实现事务(Transaction)功能。事务提供了一种将多个命令请求打包,然后一次性,按照顺序执行多个命令的机制,并且在事务执行期间,服务器不会中断事务而改去执行其他客户端命令请求,它会将事务中的所有命令都执行完毕,然后才去处理客户端的命令请求。事务首先以一个MULTI命令开始,接着将多个命令放入事务中,最后由EXEC命令将这个事务提交给服务器执行:redis>MULTIokre原创 2020-11-22 18:09:16 · 1063 阅读 · 15 评论 -
Redis之发布与订阅
欢迎阅读大魔王的睡前私语系列,这是Redis第九篇文章发布与订阅Redis的发布订阅功能由PUBISH,SUBSCRIBE,PSUBSCRIBE命令组成。通过执行SUBSCRIBE命令,客户端可以订阅一个或者多个频道,从而成为这些频道的订阅者(subscriber):每当有其他客户端向被订的频道发送消息时,频道的所有订阅者都会收到这条消息。除了订阅频道之外,客户端还可以通过执行PSUBSCRIBE命令订阅一个或者多个模式,从而成为这些模式的订阅者:每当有其他客户端向莫格频道发送消息时,消息不仅会发原创 2020-11-22 13:50:20 · 384 阅读 · 0 评论 -
redis的复制实现
复制在Redis中,用户可以通过执行SLAVEOF命令或者设置slaveof选项,让一个服务器去复制(replicate)另一个服务器,我们称呼被复制的服务器为主服务器(master),而对主服务器进行复制的服务器则被称为从服务器(slave),如下图所示:假设现在有两个Redis服务器,地址分别为127.0.0.1:6379和127.0.0.1:12345,如果我们向服务器127.0.0.1:12345发送以下命令:127.0.0.1:12345 > SLAVEOF 127.0.0.1 63原创 2020-11-15 16:53:34 · 332 阅读 · 0 评论 -
带你了解Redis的事件机制
欢迎阅读大魔王的睡前私语系列,这是Redis第七篇文章Redis服务器是一个事件驱动程序,服务器需要处理以下两类事件:文件事件(file event):Redis服务器通过套接字与客户端(或者其他Redis服务器)进行连接,而文件事件就是服务器对套接字操作的抽象,服务器与客户端(或者是其他服务器)通信会产生相应的文件事件,而服务器则通过监听并处理这些事件来完成一系列网络通信操作时间事件(time event):Redis服务器中的一些操作需要在给定的时间点执行,而时间事件就是服务器对这类定时操作原创 2020-11-14 15:32:45 · 567 阅读 · 0 评论 -
redis持久化的秘密
欢迎阅读大魔王的睡前私语系列,这是Redis第六篇文章Redis是内存数据库,为了将自己的数据保存在磁盘中,Redis提供了两种持久化方式,RDB持久化和AOF持久化,两种方式各有特点的使用场景,下面将分别介绍两种持久化的特点RDB持久化Redis是一个键值对数据库服务器,服务器中通常包含着任意个非空数据库,而每个非空数据库中又可以包含任意个键值对。Redis的RDB持久化既可以手动执行,也可以根据服务器配置选项定期执行,该功能可以将某个时间点上的数据库数据保存到RDB文件中,如下图所示这里有个图原创 2020-11-10 23:43:00 · 252 阅读 · 0 评论 -
redis之单机数据库杂谈
服务器中的数据库Redis服务器将所有数据库都保存在服务器状态redis.h/redisServer结构的db数组中,db数组的每个想都是一个redis.h/redisDb结构,每个redisDb结构代表一个数据库:struct redisServer {//一个数组,保存着服务器中的所有数据库redisDb *db;};在初始化服务器时,程序会根据服务器状态的dbNum属性来决定应该创建多少数据库:struct redisServer{ //服务器的数据库数量 int dbnum;}原创 2020-10-31 23:13:17 · 336 阅读 · 0 评论 -
redis之数据结构与对象篇(终章)
压缩列表压缩列表是列表键和哈希键的底层实现之一。当一个列表键只包含少量列表项,并且每个列表项要么是小整数值,要么是长度比较短的字符串,那么Redis就会是使用压缩列表那作为列表键的底层实现。另外,当一个哈希键只包含少量键值对,并且键值对的键和值要么是比较小的整数值或者比较短的字符串,那么Redis使用压缩列表来实现哈希键。压缩列表构成压缩列表是Redis为了节省内存而开发的,由一系列特殊编码的连续内存块组成的顺序性数据结构。下图展示压缩列表的各个组成部分,记录了各个组成部分的类型,长度以及用途。原创 2020-10-13 23:41:47 · 392 阅读 · 0 评论 -
redis之数据结构与对象篇(三)
跳跃表跳跃表是一种有序数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。跳跃表支持平均O(logN),最坏O(N)复杂度的节点查找,还可以通过顺序性操作批量处理节点。Redis使用跳跃表来作为有序集合键的底层实现之一,如果一个有序集合博阿寒的元素数量比较多,或者有序集合中元素的成员是比较长的字符串,Redis就会使用跳跃表来作为有序集合键的底层实现。和链表,字典等数据结构不一样,Redis只在两个地方用到了跳跃表,一个是实现有序集合键,另外一个是集群节点中用于内部数据原创 2020-10-02 19:56:52 · 186 阅读 · 0 评论 -
redis之数据结构与对象篇(二)
链表链表提供了高效的节点重排能力,以及顺序性的节点访问方式,并且可以通过增删节点来灵活地调整链表的长度。链表在Redis中的应用比较广泛,比如列表键的底层实现之一就是链表。当一个列表键包含了数量比较多的元素。又或者列表中包含的元素都是很长的字符串时,Redis就会使用链表作为列表键的底层实现。除了链表键之外,发布订阅,慢查询,监视器等功能也用到了链表,Redis服务器本身还是用链表来保存多个客户端的状态信息,以及使用链表来构建客户端输出缓冲区(output buffer)。链表和链表节点的实现每个原创 2020-09-26 13:44:29 · 213 阅读 · 0 评论 -
redis之数据结构与对象篇(一)
简单动态字符串Redis没有直接使用C语言传统的字符串表示(以空字符串结尾的字符数组,简称C字符串),而是自己构建一种名为简单动态字符串(SDS)的抽象类型,并将SDS用作Redis的默认字符串表示在Redis中,C字符串只会做为字符串字面量(string literal)用在一些无须对字符串值进行修改的地方,比如打印日志。当Redis需要的不仅仅是一个字符串字面量,而是一个可以被修改的字符串值时,Redis就会使用SDS来表示字符串值,比如在Redis的数据库里面,包含字符串值得键值对在底层都是由SD原创 2020-09-23 23:20:33 · 206 阅读 · 0 评论 -
RDB和AOF是什么?他们优缺点是什么?运行流程是什么?
RDB是什么RDB持久化是把当前进程数据生成快照保存到硬盘的过程,触发RDB持久化过程分为手动触发和自动触发。触发机制手动触发分别对应save和bgsave命令:save命令:阻塞当前Redis服务器,知道RDB过程完成为止,对于内存比较大的实例会造成长时间阻塞。bgsave命令:Redis进程执行fork操作创建子进程,RDB持久化过程由子进程负责,完成后自动结束。阻塞只发生在for...转载 2019-10-26 14:26:27 · 2085 阅读 · 2 评论