Redis
Redis被广泛使用的一个很重要的原因是它的高性能。因此我们必须要重视所有可能影响Redis性能的因素、机制以及应对方案。
有个小伙伴面试回来说面试官问了他一些 Redis 问题,但是他好像没有回答上来。
我说,你 Redis 不是用的很溜吗,什么问题难住你了。
他说,事情是这样的,刚开始,问了一些基础的问题,比如 Redis 的几种基本数据类型和使用场景,以及主从复制和集群的一些问题,这些都还好。
然后问 Redis 的两种持久化方式,我说与 RDB 和 AOF 两种方式,RDB 数据文件小,恢复速度快,但是对性能有影响,而且不适合实时存储。而 AOF 是现在最常用的持久化方式,它的一大优点就是实时性,并且对 Redis 半身性能影响最小。
那面试又问了,你知道 AOF 持久化之后的文件是什么格式吗?
答:好像就是文本文件吧?
好,文本文件,那你知道它有什么规则吗?或者说,它和 Redis 的协议有什么关系吗?
答:啊,这个,恩,不太清楚呢。
现在就来看一下 AOF 和 RESP 协议的关系:
-
从两种持久化方式说起。
-
RESP 协议是什么
-
动手实现一个简单的协议解析命令行工具
先从持久化说起,虽然一提到 Redis,首先想到的就是缓存,但是 Redis 不仅仅是缓存这么简单,它的定位是内存型数据库,可以存储多种类型的数据结构,还可以当做简单消息队列使用。既然是数据库,持久化功能是必不可少的。
Redis 的两种持久化方式
Redis 提供了两种持久化方式,一种是 RDB 方式,另外一种是 AOF 方式,AOF 是目前比较流行的持久化方案。
RDB 方式
RDB持久化是通过快照的方式,在指定的时间间隔内将内存中的数据集快照写入磁盘。它以一种紧凑压缩的二进制文件的形式出现。可以将快照复制到其他服务器以创建相同数据的服务器副本,或者在重启服务器后恢复数据。RDB是Redis默认的持久化方式,也是早期版本的必须方案。
RDB 由下面几个参数控制。
# appendonly参数开启AOF持久化
appendonly yes
# AOF持久化的文件名,默认是appendonly.aof
appendfilename"appendonly.aof"
# AOF文件的保存位置和RDB文件的位置相同,都是通过dir参数设置的
dir ./
# 同步策略
# appendfsync always
appendfsync everysec
# append