![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
redis专题
文章平均质量分 94
smart哥
一名有10余年经验的互联网老兵,历经从传统软件公司到大型互联网公司的洗礼,早年在中兴通讯等大型通信公司担任项目leader,后随着互联网的崛起,先后在前美团支付等大型互联网公司担任架构师。对互联网架构底层技术有相当的研究和独特的见解,在多个领域有着丰富的实战经验。
展开
-
[redis 源码走读] - 对象(redisObject)
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!redis 数据(key-value),value往往是对象的形式存在(原创 2024-06-03 20:57:38 · 467 阅读 · 0 评论 -
[redis 源码走读] - 整数集合(inset)
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!整数集合,是一个有序的数值数组对象,存储的数值不允许重复。源码在intset.c。原创 2024-06-03 20:54:42 · 685 阅读 · 0 评论 -
[redis 源码走读] - 跳跃表(skiplist)
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!原创 2024-06-03 20:52:38 · 1140 阅读 · 0 评论 -
[redis 源码走读] - 压缩列表(ziplist)
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!压缩列表ziplist是一个双向链表,设计主要是为了节省内存。保存字符串,数值两种类型( It stores both strings and integer values),列表内部实现主要是对一块连续内存进行管理,列表支持列表头尾的插入或弹出结点操作。原创 2024-06-03 20:49:36 · 1008 阅读 · 0 评论 -
[redis 源码走读] - 链表
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!redis 的链表实现不是很复杂,从listNode可以知道,list是一个双向链表,支持从链表首尾两边开始遍历结点。同时提供了listIter迭代器,方便前后方向迭代遍历。其它应该就是链表增删改查的一些常规操作了。原创 2024-06-03 14:40:46 · 304 阅读 · 0 评论 -
[redis 源码走读] - zmalloc
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!jemalloctcmalloclibc其中jemalloctcmalloc是第三方的实现,libc的实现做了一些简单的封装。原创 2024-06-03 14:39:22 · 771 阅读 · 0 评论 -
[redis 源码走读] - 字符串(sds)
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!为了节省内存空间,灵活处理不同长度范围的字符串,redis 定义了几种sdshdr(X)数据结构,对不同长度的字符串数据进行存储。原创 2024-06-03 14:37:02 · 787 阅读 · 0 评论 -
[redis 源码走读] - 字典(dict)
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!redis 是 key-value 的 NoSQL 数据库,dict 是基础数据结构,dict 总体来说是一个哈希表,哈希表 O(1) 的时间复杂度,能高效进行数据读取。dict 还有动态扩容/缩容功能,能灵活高效地使用机器内存。原创 2024-06-03 07:26:22 · 735 阅读 · 0 评论 -
[redis 源码走读] - 主从数据复制 ②
数据复制关键理解 PSYNC 命令复制双方的实现逻辑。复制双方是异步复制,所以 slave 与 master 数据并非严格一致,slave 有一定延时。全量数据复制,涉及到 rdb 文件传输,数据量大时,耗时较长。redis 支持一主多从,并不是 slave 越多越好,如果多个 slave 同时掉线,需要全量复制,如果 redis 数据量很大,master 性能肯定会大受影响,这时候可以考虑 sub-slave。redis 采用异步架构,所以需要比较熟悉异步回调处理。原创 2024-06-03 07:22:09 · 891 阅读 · 0 评论 -
[Redis 源码走读] 浅析 Redis 并发模型
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!很多朋友以为 Redis 是单线程程序,事实上它是多进程 + 多线程混合并发模型。。原创 2024-06-02 14:03:03 · 564 阅读 · 0 评论 -
[redis 源码走读] - 异步通信流程-单线程
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!本文主要讲述 Linux 平台下的 redis 客户端与服务端异步通信(单线程),不包括 redis 集群间的通信。原创 2024-06-02 13:59:44 · 597 阅读 · 0 评论 -
[redis 源码走读] - 多线程通信 I/O
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!Redis 6.0 版本增加了多线程并发处理网络 IO 功能,主要是为了利用多核资源,减轻主线程负载,提高程序整体性能。原创 2024-06-02 13:57:21 · 526 阅读 · 0 评论 -
[redis 源码走读] - 事件 - 文件事件
redis 没有使用第三方库,实现跨平台的异步事件驱动。对文件事件驱动封装也比较简洁高效。原创 2024-06-02 13:53:01 · 815 阅读 · 0 评论 -
[redis 源码走读] - 事件 - 定时器
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!定时器是 redis 异步处理事件的一个十分重要的功能。redis 定时器功能由多个时间事件组成,事件由一个双向链表维护。时间事件可以处理多个定时任务。原创 2024-06-02 08:35:44 · 792 阅读 · 0 评论 -
[redis 源码走读] - maxmemory 数据淘汰策略
redis.conf配置描述maxmemory将内存使用限制设置为指定的字节数。redis 申请和回收内存基本上都是通过zmalloc接口统一管理的,可以通过接口统计 redis 的内存使用量。当 redis 超出了内存的使用限制 maxmemory,服务在处理命令时会触发 redis 内部的数据淘汰机制。数据库所有(key-value)数据。数据库所有被设置了过期时间的(key-value)数据。aof 缓存,主从同步的积压缓冲区这些数据是不会被淘汰的,也没有计算在 maxmemory 里面。原创 2024-06-02 08:32:26 · 1105 阅读 · 0 评论 -
[redis 源码走读] - redis 过期策略
过期数据检查有三个策略:访问键值触发检查。访问包括外部读写命令,内部逻辑调用。不可能每个过期键都能实时被访问触发,所以要结合其它策略。事件驱动处理事件前触发快速检查。将过期检查负载一点点分摊到每个事件处理中。时钟定期慢速检查。要熟悉字典dict实现原理,dict是 redis 常用的几个基础数据结构之一。看了几天源码,大致理解了键值过期处理策略。很多细节,感觉理解还是不够深刻,以后还是要结合实战多思考。redis 为了保证系统的高性能,采取了很多巧妙的“分治策略”,例如键值过期检查。原创 2024-06-02 08:28:37 · 936 阅读 · 0 评论 -
[redis 源码走读] - sentinel 哨兵 - 脑裂处理方案
哨兵模式的 redis 集群有三种角色:sentinel/master/slave,它们通过 tcp 链接,相互建立联系。sentinel 作为高可用集群管理者,它的功能主要是:检查故障,发现故障,故障转移。原创 2024-06-01 16:38:18 · 728 阅读 · 0 评论 -
[redis 源码走读] - redis 与 raft 算法
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!redis 是否使用了 raft 一致性算法呢?使用了,但不是严格意义上的 raft,然而 raft 算法的核心要点:领导者选举,日志复制,安全性,你都可以在 redis 中找到相似的实现。下面将探索一下 redis 关于 raft 算法的有关实现。原创 2024-06-01 16:36:25 · 779 阅读 · 0 评论 -
[redis 源码走读] - sentinel 哨兵 - 通知第三方
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!sentinel 监控管理 redis 节点,那么我们如何感知 sentinel 的动作?sentinel 为我们提供了很多途径:详细请参考官方文档。原创 2024-06-01 15:41:05 · 904 阅读 · 0 评论 -
[redis 源码走读] - sentinel 哨兵 - 故障转移
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!前面几章已经讲了:redis 集群各个角色之间的通信,主客观下线,投票选举;在选举中胜出的哨兵 leader,由它来完成 redis 集群的故障转移:。原创 2024-06-01 08:06:45 · 757 阅读 · 0 评论 -
[redis 源码走读] - sentinel 哨兵 - 选举投票
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!投票原理:”先到先得”,每个 sentinel 机会是对等的,都有投票权利。当前 sentienl 节点,确认某个 master 客观下线后,它会主动开启故障转移的选举环节,进行拉票(选自己)和投票(选别人)。原创 2024-06-01 08:01:43 · 939 阅读 · 0 评论 -
[redis 源码走读] - sentinel 哨兵 - 主客观下线
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!本章重点走读 redis 源码,理解 sentinel 检测 master 节点的主客观下线流程。redis 哨兵集群有 3 个角色:sentinel/master/slave,每个角色都可能出现故障,故障转移主要针对master。原创 2024-06-01 07:59:50 · 1017 阅读 · 0 评论 -
[redis 源码走读] - sentinel 哨兵 - 节点链接流程
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!简述了哨兵的工作原理。本文通过strace命令抓取 sentinel 节点的系统调用日志,去熟悉节点的通信流程,更好地理解 redis 哨兵集群,是如何通过 PING / INFO / PUBLISH / SUBSCRIBE 这几个命令,将整个集群节点链接成一个整体的通信系统的。原创 2024-05-31 15:10:34 · 596 阅读 · 0 评论 -
[redis 源码走读] - sentinel 哨兵 - 原理
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!redis 有主从数据复制功能。多个实例通过读写分离,使得单进程的 redis 可以充分利用多核性能。当某些 redis 实例出现故障怎么办,服务还能正常工作吗?这时候故障管理者sentinel应运而生。它负责 redis 集群管理工作:检查故障,发现故障,转移故障,从而保证集群高可用。原创 2024-05-31 15:04:19 · 598 阅读 · 0 评论 -
[redis 源码走读] - aof 和 rdb 区别
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!aof 和 rdb 是 redis 持久化的两种方式。我们看看它们的特点和具体应用场景区别。原创 2024-05-31 07:38:13 · 602 阅读 · 0 评论 -
[redis 源码走读] - aof 持久化 ②
aof 文件存储 RESP 命令,新数据追加到文件末。aof 存储为了避免冗余,需要设置重写处理。aof 有三种存储策略,默认每秒存盘一次。根据自己的使用场景,选择存储策略。每秒存盘策略和重写功能通过多线程异步处理,保证主线程高性能。关注 redis 的博客,多看 redis.conf 配置项,里面有很多信息量。aof 持久化文件支持 aof 和 rdb 方式混合存储,可以快速重写,并且减少 aof 体积。aof 与 rdb 相比文件体积大,但是容灾能力强,出现问题丢失数据少。原创 2024-05-31 07:33:56 · 788 阅读 · 0 评论 -
[redis 源码走读] - aof 持久化 ①
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!aof (Append Only File) 是 redis 持久化的其中一种方式。服务器接收的每个写入操作命令,都会追加记录到 aof 文件末尾,当服务器重新启动时,记录的命令会重新载入到服务器内存还原数据。这一章我们走读一下源码,看看 aof 持久化的数据结构和应用场景是怎样的。主要源码逻辑在aof.c。原创 2024-05-31 07:30:30 · 639 阅读 · 0 评论 -
[redis 源码走读] - rdb 持久化 - 文件结构
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!rdb 文件是一个经过压缩的二进制文件,上一章讲了,本章主要讲述 rdb 文件的结构组成包含了哪些数据。原创 2024-05-30 19:31:44 · 521 阅读 · 0 评论 -
[redis 源码走读] - rdb 持久化 - 应用场景
rdb 作为持久化方式的一种,它是一种经过压缩的二进制数据。优点:持久化过程中,速度快,文件体积小。方便数据快速落地,或者通过网络传输数据。redis 只是将 rdb 文件作为一个备份文件而已,功能简单,并不能从文件中做一些数据查询功能操作。备份常用方式是通过时钟控制,不是实时的,异常情况丢失数据会比较多。如果把它作为一个数据库来应用,这显然是不能接受的。原创 2024-05-30 19:28:31 · 719 阅读 · 0 评论 -
追求性能极致 - Redis:Redis高可用之战之主从架构
在笔者的另外两篇文章 《Redis系列:RDB内存快照提供持久化能力》、《Redis稳定性之战:AOF日志支撑数据持久化》中,我们介绍了Redis中的数据持久化技术,包括 RDB快照 和 AOF日志。有了这两个利器,我们再也不用担心机器宕机,数据丢失了。但是持久化技术只是解决了Redis服务故障之后,快速数据恢复的问题。宕机和数据恢复的过程中整个业务系统来说,还是有损失的,并没有根本上提升可用性问题,而且持久化技术对于Redis服务性能来说是有损的。原创 2024-04-28 20:08:11 · 930 阅读 · 0 评论 -
追求性能极致 - Redis:超高并发下,Redis热点数据风险破解
作者是互联网一线研发负责人,所在业务也是业内核心流量来源,经常参与 业务预定、积分竞拍、商品秒杀等工作。近期参与多场新员工的面试工作,经常就『超高并发场景下热点数据』可用性保障与候选人进行讨论。本文聚焦一些关键点技术进行讨论,并总结一些热点场景的处理经验。原创 2024-04-28 20:05:17 · 909 阅读 · 0 评论 -
追求性能极致 - Redis:AOF日志支撑数据持久化
AOF(Append Only File)持久化:以独立日志的方式存储了 Redis 服务器的顺序指令序列,并只记录对内存进行修改的指令。当Redis服务发生雪崩等故障时,可以重启服务并重新执行AOF文件中的指令达到恢复数据的目的。也就是说,通过重放(replay),来重新建立 Redis 当前实例的内存数据结构。这种模式有没有很熟悉,可以联想到MySQL主从同步时的relay log。相对于咱们上一篇介绍的《RDB内存快照提供持久化能力。原创 2024-04-28 15:15:39 · 755 阅读 · 0 评论 -
追求性能极致 - Redis:RDB内存快照提供持久化能力
从上一篇的 《深刻理解高性能Redis的本质》 中可以知道, 我们经常在数据库层上加一层缓存(如Redis),来保证数据的访问效率。这样性能确实也有了大幅度的提升,因为从内存中取数远比从磁盘中快的多,但是本身Redis也是一层服务,也存在宕机、故障的可能性。一旦服务挂起,可能生产的后果包括如下几方面:1. Redis的数据是存在内存中的,所以一旦挂起,内存中的数据会全部丢失。2. I/O从内存层级迁移到磁盘层级,性能极速下降。原创 2024-04-28 15:12:15 · 953 阅读 · 0 评论 -
追求性能极致 - Redis:Redis or MemCache
本文做了比较详细的介绍和比较,总的来说Redis基本覆盖Memcache的能力。这也是为什么现在的互联网缓存组件优先选择Redis的原因。原创 2024-04-28 15:09:17 · 969 阅读 · 0 评论 -
追求性能极致 - Redis:使用 Redis Module 扩展功能
本文介绍了Redis的扩展模块Redis Module,设计目的就是使用加载Redis Module,在Redis中添加新的命令和数据类型,以实现更高级的功能。文章介绍了目前官方推荐的几个Module,并演示了RedisJSON的效果。原创 2024-04-28 08:31:01 · 1096 阅读 · 0 评论 -
追求性能极致 - Redis:Redis使用规范
【必须】key的命名需遵循小写原则,且不允许重复key,否则会产生覆盖情况。【必须】建议使用 “平台缩写“+“”+“项目名”+“”+“业务含义” 的英文作为key的前缀,防止key冲突,用下划线"_" 、":" 或 "." 作为间隔,字符包含A-Z,a-z,0-9,提高可读性和可维护性。如【必须】禁止使用redis保留字命名key。【建议】合理控制key的长度,避免使用过长的key或者过简单的key,减少内存消耗并增加易读性,一般key长度不建议超过30字符;原创 2024-04-28 08:27:56 · 852 阅读 · 0 评论 -
追求性能极致 - Redis:性能优化指南
Redis是我们在业务开发中很重要的一个辅助,能够极大提高我们系统的运行效率,为后端的存储服务减少压力,提升用户使用体验。但是作为一个辅助提升速度的组件,如果自己存在请求延迟的情况,那将是一个巨大的灾难,可能引起整条业务链路的雪崩。在我以往的博客里面,也有过相应的案例。但在实际业务场景中,可能有更加复杂的原因导致Redis访问效率变慢,下面我们详细来分析下。优化步骤如下:获取 Redis 的基线延迟情况开启慢指令监控,定位慢指令导致的问题,分析并优化。原创 2024-04-28 08:23:50 · 547 阅读 · 0 评论 -
追求性能极致 - Redis:缓存与数据库的数据一致性讨论
缓存与数据库的数据一致性指的是,缓存中存储的数据与数据库中存储的数据需保持一致。即缓存中存有数据,缓存的数据值 = 数据库中的值;缓存中没有该数据,数据库中的值 = 最新值。缓存中有数据,那么缓存中的值需要和数据库中值相同。缓存中本身没有数据,那么,数据库中的值必须是最新值。缓存中有数据,但是缓存中的数据与数据库中的数据不一致。缓存或者数据库中存在旧的数据,导致单个线程读到的数据是旧的。缓存策略的最常用模式是 Cache Aside Pattern。原创 2024-04-28 08:19:40 · 891 阅读 · 0 评论 -
追求性能极致 - Redis:LFU内存淘汰算法分析
上一期我们介绍了Redis系列19:LRU淘汰内存淘汰算法分析,大致了解了LRU(Least Rencently Used) 的算法原理,即将最近最久未使用的算法进行数据淘汰。稳定性和性能问题:LRU算法认为最近最少使用的数据是最该被淘汰的,但是这可能导致某些数据被频繁地淘汰和加载,因为它们可能只在某个时间段内被使用一次,而在其他时间段内则不会被使用。这会使得缓存的效率降低,增加了CPU和内存之间的通信开销。空间问题:LRU算法需要维护一个链表来记录数据的访问顺序,这需要额外的空间。原创 2024-04-27 19:30:28 · 668 阅读 · 0 评论 -
追求性能极致 - Redis:LRU内存淘汰算法分析
上一期我们介绍了Redis系列18:过期数据的删除策略,但是无论是惰性删除还是定期删除,都可能存在删除不尽的情况,无法删除完全,比如每次删除完过期的 key 还是超过 25%,且这些 key 再也不会被客户端访问。这样的话,定期删除和堕性删除可能都彻底的清理掉。如果这种情况长时间持续下去,可能会导致内存耗尽,所以Redis必须有一个完善的内存淘汰机制来保障。这就是我们这一篇的重点,Redis内存自动淘汰机制。这一篇我们介绍了Redis的几种内存淘汰策略,并且详细分析了LRU算法的实现原理。原创 2024-04-27 19:28:06 · 939 阅读 · 0 评论