Redis
文章平均质量分 97
redis学习
数字劳动力
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
第19章—数据结构篇:深入quicklist核心方法
在本节中,我们重点介绍了 quicklist 的核心函数。首先我们介绍了初始化 quicklist 实例的函数,然后详细分析了向 quicklist 头部(或尾部)插入元素的逻辑,其中针对插入大元素、插入正常元素以及节点分裂三个分支进行了详细地分析。在节点分裂之后,可能会触发 quicklist 节点的压缩,所以接下来又对 quicklist 节点压缩的逻辑进行深入剖析。原创 2026-01-09 17:51:13 · 557 阅读 · 0 评论 -
第18章—数据结构篇:quicklist核心原理剖析
quicklist 是一个类似于 Java 里面 LinkedList 的双向链表,大概结构如下图所示:quicklist 里面的节点是 quicklistNode 类型,quicklistNode 里面维护了 next、prev 指针,指向前后两个 quicklistNode 节点;然后还有一个 entry 指针,指向了一个 listpack 实例。真正的元素是存储在这个 listpack 里面的,那就是说,多个元素存储在一个 quicklistNode 里面。原创 2026-01-09 17:50:33 · 660 阅读 · 0 评论 -
第18章—数据结构篇:quicklist核心原理剖析
quicklist 是一个类似于 Java 里面 LinkedList 的双向链表,大概结构如下图所示:quicklist 里面的节点是 quicklistNode 类型,quicklistNode 里面维护了 next、prev 指针,指向前后两个 quicklistNode 节点;然后还有一个 entry 指针,指向了一个 listpack 实例。真正的元素是存储在这个 listpack 里面的,那就是说,多个元素存储在一个 quicklistNode 里面。原创 2026-01-08 15:48:28 · 600 阅读 · 0 评论 -
第17章—数据结构篇:深入ziplist的替代者listpack
在这一节中,我们重点介绍了 Redis 5 引入的 listpack 结构,在 Redis 7 中,listpack 已经完全替换了复杂的 ziplist 结构。首先,讲解了 listpack 结构的细节以及其中 element 的编码方式。然后,重点分析了 ziplist 和 listpack 之间的区别,这也是 Redis 放弃 ziplist 的主要原因之一。原创 2026-01-08 15:48:15 · 617 阅读 · 0 评论 -
第16章—数据结构篇:深入ziplist之查询、删除与更新操作详解
ziplist 作为在 Redis 7 版本之前重要的底层数据结构之一,不仅是 Redis List 底层实现依赖了它,后面要介绍的哈希结构、有序列表,也都会用到它。通过这三节课程的介绍,我们就将 ziplist 这个结构讲解完了。这三节我们重点介绍了 ziplist 结构本身、分析了 entry 的变长编码方式、ziplist 的插入、查询、删除以及更新操作,还展开说了一些关联的 C 语言知识点。在下一节,我们将介绍 Redis 7 中用来替代 ziplist 结构的listpack。原创 2026-01-07 07:28:25 · 818 阅读 · 0 评论 -
第15章—数据结构篇:深入ziplist之写入数据
本节课程中,我们重点讲解了 Redis 向 ziplist 结构中插入新元素的关键逻辑,主要分了 9 个核心步骤,其中涉及到了新 entry 长度的计算、插入点之后 entry 的 prevlen 的更新、整个 ziplist 的扩缩容以及连锁更新等操作。通过对这些步骤的分析你也能看出,向 ziplist 中插入数据的逻辑非常复杂,尤其是连锁更新这个操作,在极端条件下,会非常低效,这是由于 ziplist 结构本身所导致的,原创 2026-01-07 07:28:09 · 944 阅读 · 0 评论 -
第14章—数据结构篇:深入ziplist之核心结构分析
本节课程中,我们重点介绍了 Redis 中 ziplist 这种数据结构的核心结构。ziplist 是一块连续的内存空间,但是逻辑上它表示的是一个链表,之所以不用指针+节点的常规链表方式实现,就是为了节省指针的空间。从这个角度看,Redis 是不是把节省内存这件事情做到了极致呢?ziplist 结构本身的规则有点复杂,通过本节的讲解之后,小伙伴们再阅读 ziplist 代码的时候,有没有豁然开朗的感觉呢?原创 2026-01-06 08:30:10 · 596 阅读 · 0 评论 -
第12章—数据结构篇:深入Redissds
这里我们需要首先解决一个前置问题:Redis 为什么不用 C 语言的字符串,而非要自己搞一个出来呢?我汇总了下,主要有以下三个原因。第一个原因是“安全的二进制存储”,在有的场景里面,我们在字符串里可能需要存\0这种特殊字符。比如说,\0这种数据,如下:如果直接用 C 语言字符串的话,\0表示字符串结尾,那我就会认为是到 Hello 字符串就完了,对不对?为了要存\0这种特殊字符,sds 就不再把\0当作字符串的结尾,而是明确地记录字符串的长度,比如说存个 length 字段,我就知道到第一个\0。原创 2026-01-05 08:50:14 · 553 阅读 · 0 评论 -
第11章—实战应用篇:SortedSet命令详解与实战
本节课程的第一部分,我们重点介绍了 Sorted Set 这种结构涉及到的重点命令,主要有基础命令弹出命令范围查询以及集合命令四大类。其中,基础命令主要是读写 Sorted Set 集合中的单个元素以及 score 值;弹出命令可以按照 score 值弹出最大或最小的元素;范围查询是 Sorted Set 的重点命令,它支持正序、逆序的范围查询,还可以支持类似于分页的效果;集合操作比较简单,支持了常见的并集、交集以及差集的运算。原创 2026-01-05 08:49:54 · 702 阅读 · 0 评论 -
第13章—数据结构篇:sds核心方法解析
这一节我们重点介绍了 sds 的核心方法,主要集中在字符串的初始化以及字符串的扩缩容相关的函数实现上。在讲解字符串初始化的部分中,我们首先介绍了 C 语言如何在堆上分配内存空间,以及 C 语言柔性数组的基础知识,然后分析了 Redis 初始化字符串的具体实现,就使用到了上述两方面的知识以及指针移动的知识。接着又介绍了 Redis 字符串扩缩容的实现,其中有非常多 Redis 的巧妙设计和权衡思想。例如,扩容的时候会优先检查 sds 类型是否需要发生变化,然后进入不同的分支进行处理;原创 2026-01-04 10:09:47 · 826 阅读 · 0 评论 -
第10章—实战应用篇:Set命令详解与实战
本节课程的第一部分,我们重点介绍了 Set 这种结构涉及到的重点命令,主要有基础命令和集合命令两大类。其中,基础命令主要是操纵 Set 集合中的单个元素,集合命令主要是多个 Set 之间的集合运算。本节课程的第二部分,我们详细讲解了两个 Redis Set 结构在实践中的应用,分别是标签系统和自适应黑白名单。其中,标签系统是一个简易的 Demo,可以帮助你更好地理解 Set 集合命令的使用,自适应黑白名单则是可以直接应用到生产中的功能。希望小伙伴们参考本节提供的这些代码,亲自动手实践一下。原创 2026-01-03 07:19:13 · 865 阅读 · 0 评论 -
第09章—实战应用篇:Hash命令详解与实战(下)
这一节课程中,我们重点介绍了 Redis 哈希表的两个应用场景:一个是用户资料缓存的场景,该示例模拟了用户登录注册过程中使用缓存的场景,其中使用到了 Redis 哈希表的HGETHSET以及HGETALL三条基础命令;另一个是购物车的场景,该示例使用 Redis 的哈希表来存储一个用户的购物车数据,除了提供了增删商品的基本功能之外,还使用HINCRBY命令实现了增减商品数量的功能。原创 2026-01-03 07:19:01 · 1251 阅读 · 0 评论 -
第08章—实战应用篇:Hash命令详解与实战(上)
这一小节,我们重点介绍了 Redis 哈希表的核心命令,主要分为读写命令、递增命令、批量命令以及其他命令四大类。其中,读写命令中比较重要的是 HSET 和 HGET 命令,递增命令可以帮我们实现哈希表中单个 Value 的原子递增操作,批量读取命令一般用于线上的离线任务,批量处理哈希表中的数据,为了防止一次读取大量数据导致性能问题,一般使用 HSCAN 命令实现批量读取,尤其对元素较多的哈希表。最后还简单讲解了哈希表的辅助命令,其中比较常用的是 HLEN 命令。原创 2026-01-02 07:32:46 · 907 阅读 · 0 评论 -
第07章—实战应用篇:List命令详解与实战(下)
这一节,我们以 Java 中的 Lettuce 客户端为例,演示了操作 Redis List 的核心命令,同时给小伙伴们介绍了三个应用 Redis List 比较典型的场景。首先是简易消息队列的场景。虽然我们用 Redis List 的特性,可以实现消息队列的效果,但是在可靠性、一致性等方面会有一些问题,所以在实践中需要做一些额外的工作来进行补齐,或者直接选择成熟的消息队列组件,例如 Kafka、RocketMQ。然后是提醒功能的场景。原创 2026-01-02 07:32:34 · 1005 阅读 · 0 评论 -
第06章—实战应用篇:List命令详解与实战(上)
这一节,我们一起学习了 Redis List 的核心命令,主要将 List 命令分为基础操作、阻塞操作、复合操作、随机操作四大类进行讲解,也带着大家做了非常多的演示,小伙伴们一定要自己动手实践一下哦。命令`,它是用来截断 List 的**。LTRIM 命令后面跟两个下标值,LTRIM命令只保留这两个下标之间的元素。下面的示例中,LTRIM 命令会把 indexlist 的前两个元素截掉,保留的部分就是从下标 2 开始到 List 结尾的元素,也就是 AAA、BBB 两个字符串就被截掉了。OK。原创 2025-12-31 07:02:12 · 839 阅读 · 0 评论 -
第04章—先导基础篇:Redis7.0环境搭建与PR阅读指导
这篇文章比较简单,就是带你搭了一个 Redis 源码环境,你一定要自己动手搭建一下,后面分析 Redis 实现的时候,就可以事半功倍。然后就是和你一起去看了一下 Redis 7.0 的 Release Note,了解了一下 Redis 的新特性从哪里看,如何找到每个新新特性对应的 PR,以及这些新特性都有哪些相关的讨论和代码提交。这整体比较简单哈,接下来我们就进入“Redis 的实战应用篇”,我会带你一起学习一下 Redis 中五大类结构的常用命令,以及这五类结构在实战场景中的使用。原创 2025-12-29 08:45:13 · 933 阅读 · 0 评论 -
第03章—先导基础篇:10分钟C语言入门
本文我们简单介绍了一下阅读 Redis 源码需要的 C 语言基础,主要包括 C 字符串、结构体、指针以及数组四部分内容。其中,我们将 C 字符串与 Java 中字符串的底层实现进行了对比说明;将 C 语言中的结构体与 Java 中的类进行了对比介绍,如果你有 Java 基础或者其他语言的基础,相信写写 Demo,就可以快速上手了。最后,我们讲解了 C 语言中的一级指针、二级指针以及指针与数组的组合类型,还提供了一种分析复杂类型定义的技巧,并带你结合示例做了个简单的练习。原创 2025-12-29 08:44:56 · 867 阅读 · 0 评论 -
第02章—先导基础篇:初识Redis
首先,我们一起看了一下 Redis 官网的文档,了解了一下 Redis 的重要特性;然后,从服务架构演进的角度,回答了一下为什么要在项目里面使用 Redis 的问题;最后,通过五个维度的对比,详细回答了一个技术选型的问题:我们为什么选用 Redis 而不是 Memcached?这些都是些开放性的问题,本文给出的回答也比较简单,你可以再思考一下,尝试从其他角度回答。也欢迎你在留言区分享你的问题和想法。的问题;原创 2025-12-28 21:17:40 · 849 阅读 · 0 评论 -
第01章—开篇词:如何才能精通Redis?
你好,我是杨四正。有多年互联网一线开发经验,曾在多家互联网企业任职,涉及电商、新零售、短视频、直播等多个领域。目前在某短视频大厂任职 资深技术专家,参与公司多款中间件开发,工作中深入研究并改造过多种开源产品的实现,在架构设计方面经验丰富。我平时特别热衷于技术分享,目前已经出品了 Kafka、Dubbo、MyBatis、etcd、OpenTSDB、Promethus 等多个主题的书籍和课程。原创 2025-12-28 21:17:02 · 616 阅读 · 0 评论
分享