redis 是一个键值对数据库服务器。基于内存存储数据,它常被用做缓存数据库,用来替代 memcached。官网:
持久化,指将数据存储到可永久保存的设备中。
例如,将内存中的数据存储到可永久保存的硬盘中。
甚至,一些特别重要的数据,是需要存到 mysql 的。
redis 本身有持久化,为什么还要写进 mysql 呢?:
redis 提供了四种持久化方式:
这次主要说的是 rdb 和 aof 两种持久化方式。
rdb:redis database 的简称。一看这个,你就应该能猜到,这是 redis 的默认持久化方式。
rdb 中持久化生成的是一个经过压缩的二进制文件。
save 900 1 # 每900秒检查一次,如果有1条数据修改了,那么执行 rdb save 300 10 # 每300秒检查一次,如果有10条数据修改了,那么执行 rdb save 60 10000 # 每60秒检查一次,如果有10000条数据修改了,那么执行 rdb
服务器启动时,会直接载入 rdb 文件。
但是如果 aof 文件存在,则会载入 aof 文件。aof 文件载入过程会在后文中描述
aof 是 append only file 的简称。
aof 通过保存客户端传过来的写命令来记录数据库的状态。
如:
$3(后面是 \r\n) set $3 msg $1 5 $3 set $3 msg $1 3
需要在配置文件中加入:
appendonly yes
主进程进行如文章末尾所示的三个步骤:
# 当前 aof 文件超过上次重写时的 aof 文件大小的百分之多少时再次进行重写 # 如果之前没有冲写过,则以启动时的 aof 文件大小为依据。 auto-aof-rewrite-percentage 100 # 允许重写的最小值 auto-aof-rewrite-min-size 64mb
如果是在客户端直接执行 rewriteaof ,会阻塞服务,直到重写完成,将新的 aof 文件覆盖旧的文件。这种方式一般不会考虑。
bgrewriteaof 命令的执行过程如文末图片所示:
aof 重写是将多条命令用一条命令代替。
如上面代码所示,存储一个 msg 使用了两条命令。经过 aof 文件重写之后,就会变成如下所示,大大减少了使用的存储空间:
$3 set $3 msg $1
aof 文件还原的步骤如下:
aof 写入与重写过程图:
如对本文有疑问, 点击进行留言回复!!
MongoDB中数据的替换方法实现类Replace()函数功能详解
理解Redis持久化,RDB持久化和AOF持久化的不同处理方式
网友评论