Skip to content

Commit 6a8a318

Browse files
authored
Update Redis 面试题.md
1 parent d4902ad commit 6a8a318

File tree

1 file changed

+14
-9
lines changed

1 file changed

+14
-9
lines changed

docs/Redis 面试题.md

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -103,9 +103,20 @@ eg: user:id:3506728370
103103

104104
在直播系统中,实时排行信息包含直播间在线用户列表,各种礼物排行榜,弹幕消息(可以理解为按消息维度的消息排行榜)等信息,适合使用 Redis 中的 Sorted Set 结构进行存储。
105105

106-
### zset调表的数据结构
106+
### zset跳表的数据结构
107107

108+
增加了向前指针的链表叫作跳表跳表是一个随机化的数据结构,实质就是一种可以进行二分查找的有序链表。跳表在原有的有序链表上面增加了多级索引,通过索引来实现快速查找。跳表不仅能提高搜索性能,同时也可以提高插入和删除操作的性能。
108109

110+
原理:
111+
112+
跳表在原有的有序链表上面增加了多级索引,通过索引来实现快速查找。首先在最高级索引上查找最后一个小于当前查找元素的位置,然后再跳到次高级索引继续查找,直到跳到最底层为止,这时候以及十分接近要查找的元素的位置了(如果查找元素存在的话)。由于根据索引可以一次跳过多个元素,所以跳查找的查找速度也就变快了。
113+
114+
**为什么使用跳跃表**
115+
116+
首先,因为 zset 要支持随机的插入和删除,所以它 **不宜使用数组来实现**,关于排序问题,我们也很容易就想到 **红黑树/ 平衡树** 这样的树形结构,为什么 Redis 不使用这样一些结构呢?
117+
118+
1. **性能考虑:** 在高并发的情况下,树形结构需要执行一些类似于 rebalance 这样的可能涉及整棵树的操作,相对来说跳跃表的变化只涉及局部 *(下面详细说)*
119+
2. **实现考虑:** 在复杂度与红黑树相同的情况下,跳跃表实现起来更简单,看起来也更加直观;
109120

110121
### redis 设置过期时间
111122

@@ -150,7 +161,7 @@ LinkedHashMap:HashMap 和双向链表合二为一即是 LinkedHashMap。HashMa
150161
### Redis 持久化的两种方式⭐
151162

152163
- 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)。
154165

155166
如果同时使用 RDB 和 AOF 两种持久化机制,那么在 redis 重启的时候,会使用 **AOF** 来重新构建数据,因为 AOF 中的**数据更加完整**
156167

@@ -187,12 +198,6 @@ AOF策略使用everysec,每秒fsync一次,该策略仍可保持很好性能
187198
如果能承受分钟内的数据丢失,且追求大数据集的恢复速度选用RDB,RDB 非常适合灾难恢复。
188199
双保险策略,同时开启RDB和AOF,重启后Redis优先使用AOF来恢复数据,降低丢失数据量
189200

190-
191-
192-
### 项目中缓存是如何使用的?
193-
194-
这个,需要结合自己项目的业务来。
195-
196201
### 为什么要用缓存?
197202

198203
用缓存,主要有两个用途:**高性能****高并发**
@@ -280,7 +285,7 @@ Redis 分布式锁其实就是在系统里面占一个“坑”,其他程序
280285
**复制/数据同步过程分为两个阶段**
281286

282287
1. 全量复制:
283-
slave接收到master生成的RDB文件,先清空自身的旧数据,然后执行RDB恢复过程,然后告知master已经恢复完毕。
288+
slave接收到master生成的RDB文件,先清空自身的旧数据,然后执行RDB恢复过程,然后告知master已经恢复完毕。
284289
2. 部分复制(增量复制)
285290
主节点发送数据给从节点过程中,主节点还会进行一些写操作,这时候的数据存储在复制缓冲区中。master把自己之前创建的复制缓冲区的数据发送到slave,slave接收到aof指令后执行重写操作,恢复数据。
286291

0 commit comments

Comments
 (0)