原由
事情是这样,前几天清明假期,有个小伙伴找到我。我还想,节假日还这么好学、可造之材,结果一看是给我提 bug 的。(当然欢迎给我提 bug,一起进步👍。)
这个 bug 是针对 《面试1v1》中 Redis 基础 的一个知识点。
字有点小可能看不清,我直接将修改后正确答案粘贴过来。
第一个
面试官: 说的不错,我再问你几个 Redis 的基本命令,来测试一下你的熟练程度。set key value
,这条命令的作用是?
候选人: set key value
这个命令的作用是给指定的 key 设置字符串值 value。如果key已经存在,则覆盖原来的值。
例如:
set name "javaub"
第二个
面试官: 说说RDB吧,它的工作原理是什么?
候选人: RDB 的工作原理很简单,就是在指定的时间间隔内将内存中的数据集快照写入磁盘,恢复时是将快照文件直接读入内存。(简单来说就是快照保存,核心思路是Copy-on-Write。)
触发 RDB 又分为两种, save 和 bgsave
save
当 Redis 实例收到 save
命令后,此时会阻塞当前 Redis 服务器,在 RDB 文件创建完成之前是不能处理其他客户端发送的任何命令请求,如果数据量太大会造成长时间阻塞,期间 redis 无法处理其他请求,线上环境不建议使用。
bgsave
当 Redis 实例收到 bgsave
命令后,Redis 会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。 整个过程中,主进程仍然处理客户端请求,这样可以保证 RDB 过程不影响服务。
RDB 的优点是轻量,适合大规模的数据恢复;缺点是数据有一定的丢失风险,持久化的工作并不实时。
最后
《面试1v1》 是之前更新的一个系列合集,以面试时对答方式来记录知识。都是比较基础的高频面试题。包括 Redis、java、集合、spring、mysql 等等。