@@ -32,7 +32,7 @@ Redis 没有外部依赖,Linux 和 OS X 是 Redis 开发和测试最多的两
3232
3333全世界有非常多的网站使用到了 Redis,[ techstacks.io] ( https://techstacks.io/ ) 专门维护了一个[ 使用 Redis 的热门站点列表] ( https://techstacks.io/tech/redis ) ,感兴趣的话可以看看。
3434
35- ### Redis 为什么这么快?
35+ ### ⭐️Redis 为什么这么快?
3636
3737Redis 内部做了非常多的性能优化,比较重要的有下面 4 点:
3838
@@ -43,7 +43,7 @@ Redis 内部做了非常多的性能优化,比较重要的有下面 4 点:
4343
4444> 下面这张图片总结的挺不错的,分享一下,出自 [ Why is Redis so fast?] ( https://twitter.com/alexxubyte/status/1498703822528544770 ) 。
4545
46- ![ why-redis-so-fast] ( ./images /why-redis-so-fast.png)
46+ ![ why-redis-so-fast] ( https://oss.javaguide.cn/github/javaguide/database/redis /why-redis-so-fast.png)
4747
4848那既然都这么快了,为什么不直接用 Redis 当主数据库呢?主要是因为内存成本太高,并且 Redis 提供的数据持久化仍然有数据丢失的风险。
4949
@@ -96,7 +96,7 @@ PS:篇幅问题,我这并没有对上面提到的分布式缓存选型做详
9696
9797相信看了上面的对比之后,我们已经没有什么理由可以选择使用 Memcached 来作为自己项目的分布式缓存了。
9898
99- ### 为什么要用 Redis?
99+ ### ⭐️为什么要用 Redis?
100100
101101** 1、访问速度更快**
102102
@@ -114,7 +114,7 @@ PS:篇幅问题,我这并没有对上面提到的分布式缓存选型做详
114114
115115Redis 除了可以用作缓存之外,还可以用于分布式锁、限流、消息队列、延时队列等场景,功能强大!
116116
117- ### 为什么用 Redis 而不用本地缓存呢?
117+ ### ⭐️为什么用 Redis 而不用本地缓存呢?
118118
119119| 特性 | 本地缓存 | Redis |
120120| ------------ | ------------------------------------ | -------------------------------- |
@@ -147,7 +147,7 @@ Redis 从 4.0 版本开始,支持通过 Module 来扩展其功能以满足特
147147
148148关于 Redis 模块的详细介绍,可以查看官方文档:< https://redis.io/modules > 。
149149
150- ## Redis 应用
150+ ## ⭐️Redis 应用
151151
152152### Redis 除了做缓存,还能做什么?
153153
@@ -304,7 +304,7 @@ Redisson 内置的延时队列具备下面这些优势:
304304
305305关于 Redis 实现延时任务的详细介绍,可以看我写的这篇文章:[ 如何基于 Redis 实现延时任务?] ( ./redis-delayed-task.md ) 。
306306
307- ## Redis 数据类型
307+ ## ⭐️Redis 数据类型
308308
309309关于 Redis 5 种基础数据类型和 3 种特殊数据类型的详细介绍请看下面这两篇文章以及 [ Redis 官方文档] ( https://redis.io/docs/data-types/ ) :
310310
@@ -463,7 +463,7 @@ Redis 中有一个叫做 `Sorted Set`(有序集合)的数据类型经常被
463463- 红黑树 vs 跳表:相比较于红黑树来说,跳表的实现也更简单一些,不需要通过旋转和染色(红黑变换)来保证黑平衡。并且,按照区间来查找数据这个操作,红黑树的效率没有跳表高。
464464- B+ 树 vs 跳表:B+ 树更适合作为数据库和文件系统中常用的索引结构之一,它的核心思想是通过可能少的 IO 定位到尽可能多的索引来获得查询数据。对于 Redis 这种内存数据库来说,它对这些并不感冒,因为 Redis 作为内存数据库它不可能存储大量的数据,所以对于索引不需要通过 B+ 树这种方式进行维护,只需按照概率进行随机维护即可,节约内存。而且使用跳表实现 zset 时相较前者来说更简单一些,在进行插入时只需通过索引将数据插入到链表中合适的位置再随机维护一定高度的索引即可,也不需要像 B+ 树那样插入时发现失衡时还需要对节点分裂与合并。
465465
466- 另外,我还单独写了一篇文章从有序集合的基本使用到跳表的源码分析和实现,让你会对 Redis 的有序集合底层实现的跳表有着更深刻的理解和掌握:[ Redis 为什么用跳表实现有序集合] ( ./ redis-skiplist.md ) 。
466+ 另外,我还单独写了一篇文章从有序集合的基本使用到跳表的源码分析和实现,让你会对 Redis 的有序集合底层实现的跳表有着更深刻的理解和掌握:[ Redis 为什么用跳表实现有序集合] ( https://javaguide.cn/database/ redis/redis -skiplist.html ) 。
467467
468468### Set 的应用场景是什么?
469469
@@ -574,11 +574,11 @@ Bloom Filter 的简单原理图如下:
574574
575575如果我们需要判断某个字符串是否在布隆过滤器中时,只需要对给定字符串再次进行相同的哈希计算,得到值之后判断位数组中的每个元素是否都为 1,如果值都为 1,那么说明这个值在布隆过滤器中,如果存在一个值不为 1,说明该元素不在布隆过滤器中。
576576
577- ## Redis 持久化机制(重要)
577+ ## ⭐️Redis 持久化机制(重要)
578578
579579Redis 持久化机制(RDB 持久化、AOF 持久化、RDB 和 AOF 的混合持久化)相关的问题比较多,也比较重要,于是我单独抽了一篇文章来总结 Redis 持久化机制相关的知识点和问题:[ Redis 持久化机制详解] ( https://javaguide.cn/database/redis/redis-persistence.html ) 。
580580
581- ## Redis 线程模型(重要)
581+ ## ⭐️Redis 线程模型(重要)
582582
583583对于读写命令来说,Redis 一直是单线程模型。不过,在 Redis 4.0 版本之后引入了多线程来执行一些大键值对的异步删除操作,Redis 6.0 版本之后引入了多线程来处理网络请求(提高网络 IO 读写性能)。
584584
@@ -697,7 +697,7 @@ void bioKillThreads(void);
697697
698698关于 Redis 后台线程的详细介绍可以查看 [ Redis 6.0 后台线程有哪些?] ( https://juejin.cn/post/7102780434739626014 ) 这篇就文章。
699699
700- ## Redis 内存管理
700+ ## ⭐️Redis 内存管理
701701
702702### Redis 给缓存数据设置过期时间有什么用?
703703
0 commit comments