Java面试技巧之每天一个Tip——Redis持久化方式

Redis持久化方式的问题,可能是被问到最多的有关Redis的问题了,几乎一提到Redis这个主题,肯定是要被问到这个问题的,所以大家应该好好准备。

当然,还是简单的Tips,简单直接地回答:

两种方式:RDB和AOF。

这里不要等着面试官问,继续往下答,解释下两种方式的内涵就好,完整地答完是什么的问题。

RDB,指定时间的数据快照(dump.rdb文件),从内存复制到磁盘,等到Redis重启的时候加载使用。

AOF,将每条写入命令通过追加的方式插入日志文件,等到Redis重启的时候,通过回放命令进行恢复。

答到这里,基本就答清楚了「是什么」的问题了。

扩展性问题:

1、RDB是如何进行持久化的?

答:save和bgsave方式,save方式由于会阻塞Redis服务器,非开发环境已经不推荐使用了,一般使用bgsave命令。

bgsave的流程是:

  • 向服务器发送bgsave命令;
  • 系统调用fork函数,fork一个子进程;
  • 子进程创建rdb文件,从内存拷贝快照数据到磁盘上的rdb文件中;
  • 子进程负责将旧的rdb文件替换成新的;
  • 通知redis服务端完成状态;

2、RDB和AOF的优缺点比较?

RDB可以指定压缩成二进制文件,节省空间,效率高;适合需要全量备份的应用场景,并且可以方便地进行灾备传输;RDB恢复数据要比AOF快。

但是,RDB会造成数据丢失,fork子进程会丧失一些性能,不同版本Redis的rdb文件格式不统一,产生兼容问题。

AOF可以通过设置fsync策略(默认是每秒)进行及时追加,最多丢失1秒内的数据。AOF具有重写极致,会合并重复的命令,只保留最新的;性能损耗要比RDB模式大(即时备份的代价),日志文件体积更大,恢复速度较慢。

3、RDB和AOF模式同时开启会如何?

注意,RDB是默认开启的,AOF默认不开启。

redis4.0版本之前,即使两种方式同时开启,redis服务器恢复时也只会使用AOF的文件来进行恢复,rdb文件根本不用。

redis4.0版本之后,两种方式同时开启,RDB会将二进制快照数据写入aof文件!AOF的命令会追加到rdb文件内容之后,结果就是前半部分是rdb数据,后半部分是aof的命令。

这样,恢复的时候,二进制数据先加载进内存,后面再执行剩余的aof命令,这时候要执行的aof命令肯定要比只使用aof模式更少。

二者完美结合~

追加清单:

这里的追加问题清单就太多了,可以列一下,有关普通hash、一致性hash、hash槽的内容后面准备单独一篇文章给大家讲,敬请期待~

  • Redis哨兵模式的原理;
  • Redis-Cluster模式的原理;
  • 为什么Redis用hash槽来解决数据分配的问题?
  • hash槽为什么是16384?具体是如何做的数据分配?
  • 说说Redis的缓存问题?缓存穿透、缓存击穿和缓存雪崩的区别,以及你遇到的应用场景是什么?
  • Redis如何实现互斥锁?
  • 你使用过哪些Redis客户端?

这里提到了锁——这就意味着问题可以无限扩展了……

好了,大家周末愉快,就写到这里吧,下次说点别的,😁

~以上为本人原创,请尊重知识产权,不接受任何抄袭、演绎和未经注明出处的转载。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值