高频redis面试题讲

一、redis怎么实现持久化的

redis提供两种持久化机制RDB和AOF机制

  • RDB:保存某一个时间点之前的快照数据
  • AOF:所有命令行的记录以redis命令请求协议的格式完全持久化存储保存为aof文件
  • 混合持久化:指进行AOF重写时子进程将当前时间点的数据快照保存为RDB文件格式,而后将父进程累计命保存为AOF格式

RDB快照有两种触发方式

  1. 通过配置参数。如下
save 900 1
save 300 10
save 60 10000



上述配置是在一个定时任务里面监控的。指的是一定的时间周期内,看命令执行的个数,超过阈值则执行快照生成。例如:60s内,执行超过了10000次,则生成快照

2. 通过手动执行 bgsave/save,显式地触发生成快照。注意:save 会阻塞主进程,不推荐使用。


redis在发生RDB持久化的过程中有一个问题:RDB快照过程中redis是否会停止对外提供服务,如果不会停止服务,那如何处理新的请求




win11 打开多个redis redis 多进程_持久化


可以继续对外提供服务

如上图,当执行bgsave的时候,主进程会fork一个子进程出来。主进程中的数据变成read-only,并且共享给子进程,子进程自己去继续完成持久化,

有新的命令来的话,主进程触发copyonwrite事件,新开辟一块空间,写到新的空间中去,老的内存空间保持不变


优点:

  1. 性能最大化,fork子进程来完成写操作,让主进程继续处理命令。使用单独的子进程来进行持久化,保证了redis的高性能
  2. 当重启数据恢复的时候,数据量比较大的时候,redis直接解析二进制RDB文件,生成对应的数据存储在内存中,比AOF的启动效率更高

缺点:

  1. 数据安全性低。RDB是间隔一段事件进行持久化,如果持久化期间redis发生故障,会发生数据丢失。所以这种方式更适合数据要求不严谨的时候
  2. Linux fork()之后,kernel把父进程中所有的内存页的权限都设置为read-only,然后子进程的地址空间指向父进程,

redis内存淘汰策略LRU/LFU算法

redis如何处理过期数据的

redis多节点数据同步复制原理

redis缓存穿透&缓存雪崩&缓存失效