Redis
文章平均质量分 79
谈谈1974
火萎了,我也准备走了
展开
-
Redis 持久化 RDB 详解
文章目录前言1. RDB 文件持久化的优缺点2. RDB 的触发方式3. RDB 的处理流程4. RDB 的技术原理前言1. RDB 文件持久化的优缺点2. RDB 的触发方式3. RDB 的处理流程4. RDB 的技术原理原创 2021-03-17 10:42:55 · 1645 阅读 · 2 评论 -
Redis 6.0 源码阅读笔记(13)-Redis 集群节点选举流程
文章目录1. 集群选举的处理2. 选举源码分析1. 集群选举的处理在 RedisCluster 集群实现原理 中提到过从节点通过选举晋升为主节点的过程,其处理大致如下2. 选举源码分析原创 2020-11-28 16:12:31 · 772 阅读 · 0 评论 -
Redis 6.0 源码阅读笔记(12)-Redis 集群建立流程
文章目录1. Redis 集群2. 关键数据结构3. 集群建立源码分析1. Redis 集群在 RedisCluster 集群实现原理 中已经介绍过 Redis 3.0 版本以后使用 RedisCluster 作为分布式解决方案,其整个集群网络的建立依赖 Gossip 协议。以下为 Redis 集群建立的示意图,其大致处理流程为以下几个步骤:节点A 邀请 节点B 加入集群,节点A 与 节点B 建立连接节点A 邀请 节点C 加入集群,节点A 与 节点C 建立连接。二者通信时节点 A 将 节点B 的原创 2020-11-15 14:55:41 · 641 阅读 · 0 评论 -
Redis 6.0 源码阅读笔记(11)-主从复制 Slave 节点流程分析
文章目录1. 主从复制中 Slave 节点的处理2. 处理流程分析1. 主从复制中 Slave 节点的处理2. 处理流程分析原创 2020-10-31 16:37:49 · 638 阅读 · 0 评论 -
Redis 6.0 源码阅读笔记(10)-主从复制 Master 节点流程分析
文章目录1. Redis 主从复制概述2. 主从复制中 Master 节点的处理1. Redis 主从复制概述2. 主从复制中 Master 节点的处理原创 2020-10-30 16:49:37 · 798 阅读 · 0 评论 -
Redis 6.0 源码阅读笔记(9)-数据淘汰原理
文章目录1. 过期时间的存储源码分析2. 数据的淘汰1. 过期时间的存储在 redisDb 数据结构 一节中已经提到过,redis 数据库中有一个专门的 expires 字典用于存储显式设置了过期时间的数据(如 SETEX 命令设置的数据)。本节以 SETEX 命令为例,依据源码分析过期时间的设置过程typedef struct redisDb { dict *dict; /* The keyspace for this DB */ dict *expi原创 2020-10-24 15:15:53 · 1308 阅读 · 8 评论 -
Redis 6.0 源码阅读笔记(8)-Stream 数据类型源码分析
文章目录1. 存储结构2. 源码分析1. 存储结构在 流对象 Stream 的介绍中已经提到 Stream 的底层存储结构为前缀压缩树,其结构示例如下:OBJ_ENCODING_STREAM底层采用压缩前缀树(radix tree) 来存储,其每个节点 raxNode 用于存储键值对相关数据,不同键相同的前缀字符将被压缩到同一个节点中,并使用 iskey 属性来标识从根节点到当前节点保存的键字符是否是完整的键Stream 添加数据的命令格式如下,其中 key 为 Stream 的名称,ID原创 2020-10-13 21:46:25 · 972 阅读 · 0 评论 -
Redis 6.0 源码阅读笔记(7)-ZSet 数据类型源码分析
文章目录1. 存储结构2. 源码解析1. 存储结构在 有序集合对象 ZSet 的介绍中已经提到 ZSet 集合的底层存储结构主要有两种,其结构实例如下:OBJ_ENCODING_ZIPLIST当 ziplist 作为 zset 的底层存储结构时,每个集合元素使用两个紧挨在一起的压缩列表节点来保存,第一个节点保存元素值,第二个元素保存元素的分值,而且分值小的靠近表头,大的靠近表尾OBJ_ENCODING_SKIPLIST底层实现是跳跃表结合字典。每个跳跃表节点都保存一个集合元素,并按分值原创 2020-09-29 14:31:44 · 675 阅读 · 0 评论 -
Redis 6.0 源码阅读笔记(6)-Set 数据类型源码分析
文章目录1. 存储的结构2. 源码分析1. 存储的结构在 redis 集合对象 Set 的介绍中我们知道 redis 对于集合对象 Set 有以下两种存储形式,其内存结构如下所示:OBJ_ENCODING_INTSET集合保存的所有元素都是整数值是将会采用这种存储结构,但当集合对象保存的元素数量超过512 (由server.set_max_intset_entries 配置)后会转化为 OBJ_ENCODING_HTOBJ_ENCODING_HT底层为 dict 字典,数据作为字典的键原创 2020-09-20 12:43:48 · 979 阅读 · 2 评论 -
Redis 6.0 源码阅读笔记(2)-Redis 多线程原理
文章目录前言1. Redis 多线程模型2. Redis 多线程源码分析2.1 IO 线程的初始化2.2 IO 线程的启动2.3 IO 线程处理读任务的流程前言Redis 6.0 中一个重大的改变就是引入了多线程IO。我们都知道 Redis 基于内存操作,几乎不存在 CPU 成为瓶颈的情况, 它主要受限于内存和网络。从 Redis 自身角度来说,读写网络的 read/write 系统调用占用了 Redis 执行期间大部分 CPU 时间,瓶颈其实主要在于网络的 IO 消耗。基于这种情况,Redis 优化原创 2020-09-13 15:58:13 · 2830 阅读 · 4 评论 -
Redis 6.0 源码阅读笔记(5)-List 数据类型源码分析
文章目录1. 存储的结构2. 数据存储源码分析1. 存储的结构redis 对于 List 的存储共有 3 种存储形式,其中 OBJ_ENCODING_LINKEDLIST已经彻底废弃不再讨论,其它两种存储形式的内存结构如下图示例:OBJ_ENCODING_ZIPLIST:底层结构类似数组,使用特定属性保存整个列表的元信息,如整个列表占用的内存大小,列表保存的数据开始的位置,列表保存的数据的个数等,其保存的数据被封装在 zlentryzlentry 是压缩列表保存数据的节点,其结构与 zipli原创 2020-09-05 18:09:44 · 670 阅读 · 0 评论 -
Redis 6.0 源码阅读笔记(4)-String 数据类型源码分析
文章目录1. 数据存储的结构2. 数据存储源码分析1. 数据存储的结构在 redis 字符串对象 String 的介绍中,我们知道 redis 对于字符串的存储共有 3 种存储形式,其存储的内存结构如以下图片示例:OBJ_ENCODING_INT: 保存的数据是可以用 long 类型来存储的整数值,那么存储方式就是直接将 redisObject 的 ptr 指针指向这个整数值OBJ_ENCODING_EMBSTR: 长度小于 44 (OBJ_ENCODING_EMBSTR_SIZE_LIM原创 2020-08-29 12:12:49 · 524 阅读 · 0 评论 -
Redis 6.0 源码阅读笔记(3)-概述 Redis 重要数据结构及其 6 种数据类型
文章目录1. 重要数据结构1.1 redisServer1.2 redisDb1.3 dict1.4 dictht1.5 dictEntry2. 数据类型2.1 Redis 数据对象结构2.2 Redis 数据类型及其存储结构2.2.1 字符串对象 String1. 重要数据结构Redis 有许多重要的数据结构,其存储结构从外层往内层依次是 redisDb、dict、dictht、dictEntryredisDb 默认情况下有16个,每个 redisDb 内部包含一个 dict 的数据结构,dict原创 2020-08-27 13:03:49 · 1138 阅读 · 0 评论 -
Redis 6.0 源码阅读笔记(1)-Redis 服务端启动及命令执行
文章目录前言1. Redis 服务端启动流程2. Redis 命令执行流程前言本文基于 Redis 6.0 版本 ,读者如有兴趣可以自行点击链接进入 github 下载源码。Redis 用 C语言编写,其源码中不乏几百行的方法,这会给习惯了面向对象编程的读者造成一定的阅读障碍,不过仔细看的话也是能看懂的。Redis 服务端启动及命令执行的大致流程如下图所示,下文将对流程进行代码分析1. Redis 服务端启动流程Redis 是典型的 单 Reactor 单线程 的事件驱动模型,其服务端的启动也就是原创 2020-08-05 18:47:20 · 1526 阅读 · 2 评论 -
RedisCluster 集群实现原理
文章目录1. Redis Cluster 的架构RedisCluster 设计成 16384 个 Slot 的原因2. 集群内部通信机制2.1 RedisCluster 节点间通信方式2.2 Gossip 协议3. 高可用性原理1. Redis Cluster 的架构从 redis 3.0 版本之后,redis 支持 Redis-Cluster集群作为 Redis 的分布式解决方案。该集群采用多主多从结构,使用多个 Master节点保存数据和整个集群状态,这样就可以很好地支持横向扩容,通过增减 Mast原创 2020-07-22 22:19:02 · 927 阅读 · 0 评论 -
Redis 指南(4)-使用须知
文章目录1. Redis 的默认数据库1. Redis 的默认数据库最近使用 Redis 保存一些缓存数据,代码里存入取出数据都没有问题,但是客户端连接到 Redis 服务器通过 keys 命令查找指定数据,怎么都找不到。Redis 内置了 16 个数据库,客户端连接进去默认是使用 0 号数据库的,可使用命令select <index> 进入指定数据库。...原创 2020-03-12 18:33:17 · 220 阅读 · 0 评论 -
Redis 指南(2)-重要概念
1. Redis 的数据类型Redis 是典型的 Key-Value 型存储系统,所有数据类型都以 key 作为标识,总共可分为 5种 数据类型.当设置数据时 Nx(if not exist) 参数意味着如果 key 不存在则可以设置,可以用于实现分布式锁.1.1 String最简单的数据类型, 使用方式为 set key value.1.2 List其实是双向链表, 使用方式为 lpu...原创 2019-08-19 13:47:56 · 464 阅读 · 0 评论 -
Redis 指南(3)-使用进阶
1. Redis分布式锁1.1 基本使用用setnx来争锁,抢到之后,再用expire给锁加一个过期时间防止锁忘记了释放。1.2 可能问题如果在setnx之后,执行expire之前Redis进程意外crash或者要重启维护了怎么处理?set指令可以组合复杂的参数,可把setnx和expire合成一条指令来用的,保证争锁和设置过期时间的原子性。2. Redis查找Key2.1 基本...原创 2019-08-27 12:19:34 · 337 阅读 · 1 评论 -
Redis 指南(1)-win环境安装及集群搭建
文章目录1. Redis 安装1.1 获取 Redis 安装包1.2 Redis 安装1.3 Redis 客户端启动1.4 自定义配置文件2. 集群搭建2.1 单机集群思路2.2 集群搭建步骤2.3 启动Redis主从复制集群2.4 主从关系2.4.1 查看主从关系2.4.2 设定主从关系2.4.3 取消主从关系2.5 哨兵模式2.5.1 配置方式2.5.2 启动哨兵1. Redis 安装...原创 2019-08-27 14:55:57 · 215 阅读 · 0 评论