内存型数据是断电后丢失,重启机子后丢失,重启r服务后丢失

mysql是关系型数据库,他是实实在在的存在磁盘的数据,而redis是内存型数据库,他的数据就不是存在硬盘了,是在内存,存在内存,你用着看着挺好,一旦你重启之后再进来keys*,啥也没有了。

做个小实验:

Redis中的数据如何持久化到数据库中 redis数据持久化到mysql_持久化


所以,redis就引出了两种数据持久化的配置:

一种是rdb 配置 项dbfilename dump.rbd(需要通过save手动触发存到该文件中,或者在配置文件中save xxx每秒 xxx个操作就存),这一种有时间间隔,数据可能丢失。

Redis中的数据如何持久化到数据库中 redis数据持久化到mysql_redis_02


另一种是aof 配置中:appendnotallow=yes

Redis中的数据如何持久化到数据库中 redis数据持久化到mysql_持久化_03


这两种持久化方式我用的第一种,虽然第二种是最大程度保证数据不丢,并且大部分人都用aof,但是他记录得太频繁,但凡执行修改数据的命令他啥都要记录进去,redis官方说每秒可以操作十万个命令,要是我以后数据多了,修改命令多了,这个aof文件越来越大了我怕服务器的磁盘顶不住。但是aof可以配置多久做一次内存持久化,可以配置成appendfsync no ,意思是根据系统的缓存大小机制。但是我看aof文件也太冗余了。人家rbd,虽然看着是一大堆乱码。但是人家多人性化,你要存你就save一下,你忘了save它还自动按时间间隔和操作次数给你save一下,但是redis.conf是直接两个都有,所以一般你的data目录下有rdb和aof两个文件,实际用一个来做持久化就可以了,我就注释了aof的配置。怎样在不重启docker的redis服务(安装的redis一样适用)的情况下,把rbd持久化的数据给备份到aof上,并且从此我的redis就以aof来持久化数据?

1、这道题肯定是aof持久化给注释掉了只用rdb的情况下,首先你要备份一分原rdb吧,要是我没转换成功还回得去。

2、然后执行这两条命令

Redis中的数据如何持久化到数据库中 redis数据持久化到mysql_数据_04


第一条命令是临时改为aof持久化方式,第二条是关闭rdb持久化方式

3、删除原文件dump.rdb

4、去get或者keys * 发现数据没有丢失

5、这只是临时改变为aof,题干说的是从此以后,所以还需最后一步,去配置文件把appendonly改为yes

6、tail -f appendonly.aof监控这个文件,你再set值进库,发现现在真用的aof,dump.rdb没有重新生成了。全程没有重启一下redis服务。