Redis持久化
所谓Redis持久化,就是将内存中Redis数据保存到磁盘中,达到一个备份的效果,以便恢复数据。
Redis的持久化方式有两种: RDB方式 AOF方式
RDB方式:
打开Redis配置文件 vi redis.conf
save 900 1 (每900秒 发生1次修改 写入磁盘)
save 300 10 (每300秒 发生10次修改 写入磁盘)
save 60 1000 (每60秒 发生100次修改 写入磁盘)
dbfilename dump.rdb (保存数据的文件名)
dir ./ (保存数据的所在目录) 注意注意注意:这里有大坑! 这个保存数据的所在目录 默认的是./ 实际上这个目录并不是相对于redis.conf所在的目录,而是相对于你执行命令时的目录。
检查该文件有没有 如果没有请先手动创建
Redis启动时会自动读取该文件 恢复数据 (因此可以写个定时任务定时将dump.rdb备份到别处以时间命名 以便可以进行恢复任何阶段的数据)
重启Redis : /etc/init.d/redis restart
(redis设置系统服务请查看 http://www.cnblogs.com/fengyumeng/p/7513699.html)
原理:子进程备份数据->替换旧的dump.rdb
优点:速度快 性能强
缺点:如果在写入磁盘之前服务器突然抽风,容易丢失数据。
AOF方式:
打开Redis配置文件 vi redis.conf
appendonly no (是否开启AOF方式)
appendfilename "appendonly.aof" (保存数据的文件名)
appendfsync always (每修改一次同步一次)
appendfsync everysec (每秒同步一次)
appendfsync no (不同步)
选择哪种打开哪种
原理:不断在appendonly.aof文件中追加数据
优点:最大程度保证数据安全
缺点:速度慢
当 Redis 启动时, 如果 RDB 持久化和 AOF 持久化都被打开了, 那么程序会优先使用 AOF 文件来恢复数据集, 因为 AOF 文件所保存的数据通常是最完整的。
虽然Redis服务重启后数据可以恢复,但是Linux重启后Redis数据还是丢失干净,解决方式如下:
编辑sysctl.conf文件
vi /etc/sysctl.conf
添加一行
vm.overcommit_memory = 1
立即生效
sysctl -p