redis学习
文章平均质量分 89
See_NUMB
这个作者很懒,什么都没留下…
展开
-
Sentinel(哨兵)检测主观下线、客观下线、选举领头Sentinel、实现故障转移
文章目录主观下线客观下线选举领头Sentinel故障转移修改从服务器的复制目标主观下线默认情况下,Sentinel哨兵会以每秒一次的频率向所有与它创建命令连接的实例(包括主服务器、从服务器、其他Sentinel)发送PING命令,并通过实例返回的PING命令回复来判断实例是否在线。收到的有效回复为+PONG、-LOADING、-MASTERDOWN命令,其余都是无效回复(包括没有回复的)。如果在down-after-milliseconds毫秒以内,sentinel收到的都是无效回复,原创 2021-04-20 13:49:20 · 1021 阅读 · 4 评论 -
redis哨兵实现(哨兵之间的命令互传)
文章目录1. 概括2.1 初始化服务器和使用专用代码2.2 初始化Sentinel状态2.2 masters属性2.3 创建连向主服务器的网络连接2.4 获取主服务器信息2.5 获取从服务器信息2.6 Sentinel发送信息1. 概括Sentinel(哨兵)是Redis高可用性的解决方案:由一个或多个哨兵组成的哨兵系统可以监视任意多个主服务器和从服务器,当主服务器进入下现在状态的时候,哨兵系统将在该主服务器的从服务器中选一个升级为主服务器,替代已线下的主服务器,继续处理命令请求。如下图,serve原创 2021-04-19 22:14:45 · 277 阅读 · 0 评论 -
redis慢查询日志
文章目录1. 概括2. 慢查询记录的保存3. 慢查询日志的阅览和删除4. 添加新日志5. 总结1. 概括Redis 的慢查询日志功能用于记录执行时间超过给定时长的命令请求, 用户可以通过这个功能产生的日志来监视和优化查询速度。服务器配置有两个和慢查询日志相关的选项:slowlog-log-slower-than 选项指定执行时间超过多少微秒(1 秒等于 1,000,000 微秒)的命令请求会被记录到日志上。举个例子, 如果这个选项的值为 100 , 那么执行时间超过 100 微秒的命令就会被记原创 2021-04-18 14:32:21 · 320 阅读 · 0 评论 -
redis主从复制实现
文章目录1. 概述2.1 旧版本的复制功能2.2.1 同步2.2.2 命令传播2.2.3 旧版本的缺陷3 新版本的复制3.1 实现-复制偏移量3.2 复制积压缓冲区3.3 服务器运行ID1. 概述使用向redis服务器(127.0.0.1:12345)发送命令SLAVEOF 127.0.0.1:6379,则 127.0.0.1:6379会成为主服务器,127.0.0.1:12345成为从服务器。进行复制中的主从服务器将保存相同的数据,这种现象称为数据库状态一致。2.1 旧版本的复制功能2.2.1原创 2021-04-16 22:12:59 · 90 阅读 · 0 评论 -
Redis客户端的属性、创建和关闭(伪客户端)
文章目录1. 概括2 客户端属性2.1 套接字描述符2.2 标志2.3 输入缓冲区2.4 命令与命令参数2.5 命令实现2.6 输出缓冲区2.7 身份验证2.8 时间2. 客户端的创建和关闭2.1 创建2.2 关闭普通客户端2.3 Lua脚本的伪客户端2.4 AOF文件的伪客户端1. 概括Redis服务器是一对多服务器程序,一个服务器可以与多个客户端建立网络连接Redis的文件事件是由I/O多路复用技术实现的,Redis服务程序使用单线程单进程的方式处理命令请求,与多个客户端进行网络通信服务器会为原创 2021-04-09 21:24:25 · 308 阅读 · 0 评论 -
redis事件(文件事件和时间事件)
文章目录1. 概括2.1 文件事件2.1.1 文件事件处理器的构成2.1.2 I/O 多路复用程序的实现2.1.3 事件的类型2.1.3 文件事件的处理器2.2 时间事件2.2.1 时间事件的实现2.2.1 时间事件应用实例:serverCron函数2.2.2 事件的调度和执行1. 概括redis是事件驱动程序,服务器需要处理以下两种事件文件事件redis通过套接字与客户端进行连接,而文件事件就是服务器对套接字操作的抽象。客户端与服务器的通信会产生相应的文件事件,服务器通过监听并处理这些事件来完成原创 2021-04-09 14:41:13 · 226 阅读 · 0 评论 -
AOF持久化是如何实现的?
除了RDB持久化功能之外,Redis还提供了AOF持久化功能。与RDB持久化通过保存数据库中的键值对来记录数据库状态不同,AOF持久化是通过保存Redis服务器所执行的写命令来记录数据库状态的。如下图#mermaid-svg-YAZ6teQX6UW23KKm .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-.原创 2021-04-06 21:26:32 · 166 阅读 · 0 评论 -
RDB持久化是如何实现的?
因为redis是将数据保存在内存中行操作的,一旦服务器进程退出,其中的数据就会消失不见了。如何解决这样的问题,我们可以将内存中的数据保存在磁盘中,这样就能避免数据意外丢失了。Redis提供RDB持久化功能,将redis存在内存中的数据保存在磁盘中去。RDB持久化可以手动完成,也可以根据服务器配置选项定期执行经过持久化保存后,会形成一个经过压缩的二进制文件,RDB文件。也可以使用RDB文件还原数据库的状态。RDB的创建使用两个命令可以生成RDB文件,SAVE和BGSAVE两个命令的区.原创 2021-04-05 20:59:37 · 135 阅读 · 0 评论 -
Redis-跳跃表(有序集合Zset的底层实现)
文章目录1. 跳跃表的实现2. 跳跃表节点2.1 层2.2 前进指针2.3 跨度2.4 后退指针2.5 分值和成员3. 总结跳跃表(skiplist)是一种有序数据结构, 它通过在每个节点中维持多个指向其他节点的指针, 从而达到快速访问节点的目的。跳跃表支持平均 O(\log N) 最坏 O(N) 复杂度的节点查找, 还可以通过顺序性操作来批量处理节点。Redis 使用跳跃表作为有序集合键的底层实现之一: 如果一个有序集合包含的元素数量比较多, 又或者有序集合中元素的成员(member)是比较长的字符原创 2021-01-10 19:59:23 · 214 阅读 · 0 评论 -
Redis-hash算法、rehash及如何解决键冲突
文章目录1. hash算法2. rehash3. 哈希表的扩展和收缩4. 解决哈希冲突5. 渐进式rehash1. hash算法学过数据结构的知道,当要将一个新的键值对添加到字典里面时, 程序需要先根据键值对的键计算出哈希值和索引值, 然后再根据索引值, 将包含新键值对的哈希表节点放到哈希表数组的指定索引上面。计算hash值和索引值的方法如下# 使用字典设置的哈希函数,计算键 key 的哈希值hash = dict->type->hashFunction(key);# 使用哈希原创 2021-01-10 17:22:09 · 1647 阅读 · 0 评论 -
Redis-字典(hash表的底层实现)
文章目录1. 字典的实现1.1 哈希表1.2 哈希表节点1.3 字典字典,又称为符号表、关联数组或映射,是一种保存键值对的抽象数据结构。字典中每个键都是独一无二的,可以根据键对键值对进行操作。Redis所使用的C语言并没有内置字典,因此Redis构建了自己的字典实现。Redis的数据库就是使用字典来作为底层实现的,对数据库的增删改查也是构建在对字典得操作之上的。例如,SET msg "hello world",这个键值对就是保存在代表数据库字典里面的。除了用来表示数据库之外,字典哈市哈希键的底层实现原创 2021-01-10 15:34:56 · 351 阅读 · 0 评论 -
Redis-链表和链表节点
文章目录1. 链表和链表节点的实现2. 链表和链表节点的API3. 总结1. 链表和链表节点的实现每个链表节点使用一个 adlist.h/listNode 结构来表示:typedef struct listNode { // 前置节点 struct listNode *prev; // 后置节点 struct listNode *next; // 节点的值 void *value;} listNode;多个 listNode 可以通过 pr原创 2021-01-09 19:53:47 · 130 阅读 · 0 评论 -
Redis-简单动态字符串
文章目录1. SDS的定义2.SDS与C字符串的区别2.1获取字符串长度更加容易2.2防止缓冲区溢出2.3 减少内存重分配的次数2.3.1 空间预分配2.3.2 惰性空间释放2.4 二进制安全2.5 兼容部分C字符串函数3. 总结Redis没有使用C语言的传统字符串,而是自己构建了自己的简单动态字符串(simple dynamic string , SDS)。Redis只有在一些无需对字符串修改的地方使用C字符串,比如打印日志。大多数情况下,Redis都会使用SDS,例如包含字符串的键值对。其中键值对原创 2021-01-09 19:19:17 · 140 阅读 · 0 评论 -
redis五种数据类型及其相关命令
文章目录简介String类型List类型Set类型Sorted-Sets类型(Zset)Hash(哈希)类型简介Redis数据就是以key-value形式来存储的,key只能是字符串类型,value可 以是以下五种类型: String、 List、Set、 Sorted-Sets、 Hash启动Redis服务:./redis-server,可以在后面加上自定义redis.conf关闭Redis服务:./redis-cli shutdown连接Redis:./redis-cli断开Redis:按下原创 2020-07-27 21:38:31 · 471 阅读 · 0 评论