接上篇基础:Redis常见面试题–基础篇-CSDN博客
问:redis中如何实现持久化?
答:有两种,AOF和RDB。
RDB:在指定的时间间隔内将内存中的数据集快照写入磁盘(Snapshot
),它恢复时是将快照文件直接读到内存里。
- 好处:适合大规模的数据恢复;对数据完整性和一致性要求不高
- 劣势:在一定间隔时间做一次备份,所以如果Redis意外
down
掉的话,就会丢失最后一次快照后的所有修改。
AOF:以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录),只许追加文件但不可以改写文件,Redis启动之初会读取该文件重新构建数据,换言之,Redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。
- 好处:数据完整性和一致性高,但性能差。
- 劣势:恢复速度慢,且对redis性能有影响
问:如何抉择持久化方式?
如果是数据不那么敏感,且可以从其他地方重新生成补回的,那么可以关闭持久化。
如果是数据比较重要,不想再从其他地方获取,且可以承受数分钟的数据丢失,比如缓存等,那么可以只使用RDB。
如果是用做内存数据库,要使用Redis的持久化,建议是RDB和AOF都开启,或者定期执行bgsave做快照备份,RDB方式更适合做数据的备份,AOF可以保证数据的不丢失。
在redis4.0之后,添加了混合持久化的方式,aof文件前半段是rdb后半段是aof。不好的地方是兼容性差,之前的aof文件无法识别。
问:redis中对于过期键的删除策略?
- 惰性删除:惰性删除不会去主动删除数据,而是在访问数据的时候,再检查当前键值是否过期,如果过期则执行删除并返回 null 给客户端,如果没有过期则返回正常信息给客户端。它的优点是简单,不需要对过期的数据做额外的处理,只有在每次访问的时候才会检查键值是否过期,缺点是删除过期键不及时,造成了一定的空间浪费。
- 定期删除:Redis会周期性的随机测试一批设置了过期时间的key并进行处理。测试到的已过期的key将被删除。
问:了解redis中的内存淘汰策略吗?
Redis是不断的删除一些过期数据,但是很多没有设置过期时间的数据也会越来越多,那么Redis内存不够用的时候是怎么处理的呢?答案就是淘汰策略。当Redis的内存超过最大允许的内存之后,Redis会触发内存淘汰策略,删除一些不常用的数据,以保证Redis服务器的正常运行。