
Redis
文章平均质量分 94
Redis
Kim_smile
Be brave to try
展开
-
从 Reactor 模式看 Netty、Redis 线程模型
Reactor 模式目前存在的线程模型有:传统阻塞 I/O 服务模型 和 Reactor 模式。Reactor 模式是基于事件驱动开发的,核心组成部分包括 Reactor 和线程池,其中 Reactor 负责监听和分发事件,线程池负责处理事件。Reactor 分为三种模型:单线程模型 (单 Reactor 单线程)多线程模型 (单 Reactor 多线程)主从多线程模型 (多 Reactor 多线程)单 Reactor 单线程Reactor 和 Handler 都在同一个线程中执行,即 s原创 2022-05-07 09:56:05 · 1273 阅读 · 0 评论 -
Redis高可用的基石——主从复制
Redis 支持主从同步,提供 Cluster 集群部署模式,通过 Sentinel 哨兵来监控 Redis 主服务器的状态。以此来保证 Redis 的高可用,则主从复制正是高可用的基石。一主多从,主负责写,并且将数据复制到其它的 slave 节点,从节点负责读。所有的读请求全部走从节点。这样也可以很轻松实现水平扩容,支撑读高并发。从节点的数据来自主节点,实现原理就是主从复制机制。主从复制过程主从复制过程大体可以分为3个阶段:连接建立阶段(即准备阶段)、数据同步阶段、命令传播阶段。连接建立阶段保原创 2021-12-05 19:59:38 · 179 阅读 · 0 评论 -
Redis设计与实现——对象
文章目录对象的类型与编码字符串对象编码转换列表对象编码转换哈希对象编码转换集合对象编码转换有序集合对象为什么zset同时使用跳跃表和字典来实现?编码转换Redis 的底层数据结构主要包括简单动态字符串(SDS)、双端链表、字典、跳跃表、整数集合、压缩列表。Redis 并没有直接使用这些数据结构来实现键值对数据库,而是基于这些数据结构创建了一个对象系统,这个系统包含字符串对象、列表对象、哈希对象、集合对象和有序集合对象这五种类型的对象,每一种对象类型都至少采用了两种编码,不同的编码使用的底层数据结构也不.原创 2021-12-05 19:37:23 · 968 阅读 · 0 评论 -
基于Redis3.0与6.0版本源码看SDS内存优化
实践中引发的思考最近在看《Redis 设计与实现》这本书,不由得赞叹 Redis 底层数据结构设计的精妙。在看到 Redis 对象章节时,我们知道 Redis 是使用对象来表示数据库中的键和值的,其中键总是字符串对象,而字符串对象的编码又可以是 int、raw 或者 embstr 。关键点来了,书中对字符串对象是这么写的:如果字符串对象保存的是一个字符串值,并且这个字符串值的长度小于等于 39 字节,那么字符串对象将使用 embstr 编码的方式来保存这个字符串值。看到这,我马上实践了一波,结原创 2021-11-28 23:25:53 · 807 阅读 · 0 评论 -
Redis设计与实现——跳跃表
跳跃表(skiplist)是一种有序数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。跳跃表支持平均 O(log N) 、最坏 O(N) 复杂度的节点查找,还可以通过顺序性操作来批量处理节点。Redis 使用跳跃表作为有序集合键的底层实现之一:如果一个有序集合包含的元素数量比较多,又或者有序集合中元素的成员(member)是比较长的字符串时,Redis 就会使用跳跃表来作为有序集合键的底层实现。跳跃表的实现Redis 的跳跃表由 zskiplistNode 和 zsk原创 2021-11-28 21:06:36 · 173 阅读 · 0 评论 -
Redis设计与实现——字典(渐进式rehash细节)
字典是一种用于保存键值对的数据结构。在字典中,一个键(key)可以和一个值(value)进行关联(或者说将键映射为值),这些关联的键和值就称为键值对。字典的实现Redis 的字典使用哈希表作为底层实现,每个字典带有两个哈希表,一个平时使用,另一个仅在进行 rehash 过程中使用,一个哈希表里面可以有多个哈希表节点,每个哈希表节点就保存了字典中的一个键值对。哈希表 hashtableRedis 字典所使用的哈希表由 dict.h/dictht 结构定义:typedef struct dictht原创 2021-11-28 21:04:10 · 410 阅读 · 0 评论 -
Redis设计与实现——简单动态字符串SDS
Redis 没有直接使用 C 语言传统的字符串表示(以空字符\0结尾的char类型字符数组,以下简称 C 字符串), 而是自己构建了一种名为简单动态字符串(simple dynamic string,SDS)的抽象类型, 并将 SDS 用作 Redis 的默认字符串表示。在 Redis 里面, C 字符串只会作为字符串字面量(string literal), 用在一些无须对字符串值进行修改的地方,比如打印日志。SDS 的定义每个 sds.h / sdshdr 结构表示一个 SDS 值,在 Redis原创 2021-11-28 21:00:10 · 630 阅读 · 0 评论