@@ -103,9 +103,20 @@ eg: user:id:3506728370
103
103
104
104
在直播系统中,实时排行信息包含直播间在线用户列表,各种礼物排行榜,弹幕消息(可以理解为按消息维度的消息排行榜)等信息,适合使用 Redis 中的 Sorted Set 结构进行存储。
105
105
106
- ### zset调表的数据结构 ⭐
106
+ ### zset跳表的数据结构 ⭐
107
107
108
+ 增加了向前指针的链表叫作跳表跳表是一个随机化的数据结构,实质就是一种可以进行二分查找的有序链表。跳表在原有的有序链表上面增加了多级索引,通过索引来实现快速查找。跳表不仅能提高搜索性能,同时也可以提高插入和删除操作的性能。
108
109
110
+ 原理:
111
+
112
+ 跳表在原有的有序链表上面增加了多级索引,通过索引来实现快速查找。首先在最高级索引上查找最后一个小于当前查找元素的位置,然后再跳到次高级索引继续查找,直到跳到最底层为止,这时候以及十分接近要查找的元素的位置了(如果查找元素存在的话)。由于根据索引可以一次跳过多个元素,所以跳查找的查找速度也就变快了。
113
+
114
+ ** 为什么使用跳跃表**
115
+
116
+ 首先,因为 zset 要支持随机的插入和删除,所以它 ** 不宜使用数组来实现** ,关于排序问题,我们也很容易就想到 ** 红黑树/ 平衡树** 这样的树形结构,为什么 Redis 不使用这样一些结构呢?
117
+
118
+ 1 . ** 性能考虑:** 在高并发的情况下,树形结构需要执行一些类似于 rebalance 这样的可能涉及整棵树的操作,相对来说跳跃表的变化只涉及局部 * (下面详细说)* ;
119
+ 2 . ** 实现考虑:** 在复杂度与红黑树相同的情况下,跳跃表实现起来更简单,看起来也更加直观;
109
120
110
121
### redis 设置过期时间
111
122
@@ -150,7 +161,7 @@ LinkedHashMap:HashMap 和双向链表合二为一即是 LinkedHashMap。HashMa
150
161
### Redis 持久化的两种方式⭐
151
162
152
163
- RDB:快照形式是直接把内存中的数据保存到一个dump的文件中,定时保存,保存策略。 当Redis需要做持久化时,Redis会fork一个子进程,子进程将数据写到磁盘上一个临时RDB文件中。当子进程完成写临时文件后,将原来的RDB替换掉。
153
- - AOF:把所有的对Redis的服务器进行修改的命令都存到一个文件里,命令的集合。 使用AOF做持久化,每一个写命令都通过write函数追加到appendonly.aof中。aof的默认策略是每秒钟fsync一次,在这种配置下,就算发生故障停机,也最多丢失一秒钟的数据。 缺点是对于相同的数据集来说,AOF的文件体积通常要大于RDB文件的体积。根据所使用的fsync策略,AOF的速度可能会慢于RDB。 Redis默认是快照RDB的持久化方式。 对于主从同步来说,主从刚刚连接的时候,进行全量同步(RDB);全同步结束后,进行增量同步(AOF)。
164
+ - AOF:把所有的对Redis的服务器进行修改的命令都存到一个文件里,命令的集合。 使用AOF做持久化,每一个写命令都通过write函数追加到appendonly.aof中。aof的默认策略是每秒钟fsync一次,在这种配置下,就算发生故障停机,也最多丢失一秒钟的数据。 缺点是对于相同的数据集来说,AOF的文件体积通常要大于RDB文件的体积。根据所使用的fsync策略,AOF的速度可能会慢于RDB。对于主从同步来说,主从刚刚连接的时候,进行全量同步(RDB);全同步结束后,进行增量同步(AOF)。
154
165
155
166
如果同时使用 RDB 和 AOF 两种持久化机制,那么在 redis 重启的时候,会使用 ** AOF** 来重新构建数据,因为 AOF 中的** 数据更加完整** 。
156
167
@@ -187,12 +198,6 @@ AOF策略使用everysec,每秒fsync一次,该策略仍可保持很好性能
187
198
如果能承受分钟内的数据丢失,且追求大数据集的恢复速度选用RDB,RDB 非常适合灾难恢复。
188
199
双保险策略,同时开启RDB和AOF,重启后Redis优先使用AOF来恢复数据,降低丢失数据量
189
200
190
-
191
-
192
- ### 项目中缓存是如何使用的?
193
-
194
- 这个,需要结合自己项目的业务来。
195
-
196
201
### 为什么要用缓存?
197
202
198
203
用缓存,主要有两个用途:** 高性能** 、** 高并发** 。
@@ -280,7 +285,7 @@ Redis 分布式锁其实就是在系统里面占一个“坑”,其他程序
280
285
** 复制/数据同步过程分为两个阶段**
281
286
282
287
1 . 全量复制:
283
- slave接收到master生成的RDB文件,先清空自身的旧数据,然后执行RDB恢复过程,然后告知master已经恢复完毕。
288
+ slave接收到master生成的RDB文件,先清空自身的旧数据,然后执行RDB恢复过程,然后告知master已经恢复完毕。
284
289
2 . 部分复制(增量复制)
285
290
主节点发送数据给从节点过程中,主节点还会进行一些写操作,这时候的数据存储在复制缓冲区中。master把自己之前创建的复制缓冲区的数据发送到slave,slave接收到aof指令后执行重写操作,恢复数据。
286
291
0 commit comments