redis深入—持久化
来源:互联网 发布:购买备案域名注意事项 编辑:程序博客网 时间:2024/06/05 19:56
snapshotting:
一:配置:
save 60 1000 60s内,如果达到1000次写入,创建快照(可以开启多个save,满足任意一条件即可创建快照)
stop-writes-on-bgsave-error no 创建快照失败后是否仍然继续执行写命令
rdbcompression yes 是否对文件压缩
dbfilename dump.rdb 生成文件名为dump.rdb
二:创建快照的方法:
1、客户端向redis发送BGSAVE命令(WINDOWS平台不支持该命令),redis调用fork创建一个子进程负责将快照写入硬盘,父进程则继续处理命令请求。
2、客户端向redis发送SAVE命令,redis不会创建子进程处理,而是自己生成快照,期间不会响应其他命令,所以一般在没有足够内存去执行BGSAVE时才使用该命令。
3、配置文件中开启save(如配置中的第一条),则满足条件后redis会自动触发BGSAVE命令。
4、redis通过shutdown命令接收到关闭服务器请求时,会执行SAVE命令,阻塞所有客户端,不再接收客户端发送的任何命令,在SAVE命令执行完后关闭服务器。
5、一个redis连接另一个redis,并向对方发送SYNC命令开始一次复制操作时,如果主服务器目前没有在执行或是刚执行完BGSAVE操作,那么主服务器就会执行BGSAVE命令。
三:说明:
1、如果频繁创建快照,会造成资源浪费;如果过于稀少,则有丢失大量数据的隐患。在使用配置文件时,一般会配置多个save条件。
2、SAVE和BGSAVE选择:
内存充足选BGSAVE,因为不会阻塞客户端。 内存不充足选SAVE,因为BGSAVE创建子进程会占用内存,降低性能。
3、SAVE和BGSAVE具体说明:
当redis存储的数据量比较小,如几个G,使用BGSAVE快照一般没有问题,但是随着redis占用的内存越来越多,并且剩余空闲内存很少(或者redis运行在virtual machine上面),此时使用BGSAVE可能引发系统长时间停顿,或是大量使用虚拟内存,导致降低redis性能至无法使用。
为了防止redis创建子进程出现停顿,一方面可以关闭自动保存,选用手动发送BGSAVE,虽然也会造成停顿,但是我们可以控制停顿出现的时间;另一方面,使用SAVE命令,虽然会阻塞redis直到快照完成,但是不会创建子进程导致redis停顿,也不会有子进程争抢资源。
如果用户能够接受或者妥善处理快照持久化带来的数据丢失,那么快照是不错的选择。否则,应该使用AOF持久化。
AOF(append-only file):
一:配置:
appdendonly yes 是否使用AOF持久化
appendfsync everysec 每一秒同步一次(还可以配置为always—每个命令都同步一次,no—系统自己决定多久同步一次)
no-appendfsync-on-rewrite no 在对AOF压缩时,能否执行同步操作
auto-aof-rewrite-percentage 100 aof文件体积比上一次重写后的aof文件大了100%(1倍)后执行一次压缩
auto-aof-rewrite-min-size 64mb AOF文件的体积达到64MB后进行压缩
第4条和第5条要同时满足才会执行压缩。
二:appendfsync同步频率:
always: 每个命令都同步,数据丢失最少,但是严重降低redis性能。
no: 由操作系统自己决定,不解释了,这个一般不考虑。
everysec:每秒执行一次,最多丢失一秒内的数据。
三:重写/压缩AOF文件:
虽然AOF能做到基本不丢失数据,并在极短时间完成定期持久化,但是也有缺陷,就是AOF文件的体积。
随着redis不断写入操作命令到AOF文件,其体积会不断增大,到达一定程度后,还原操作的执行时间就会非常长。
解决方式:
用户可以向redis发送BGREWRITEAOF命令,该命令通过移除AOF文件中的冗余命令来生成新的AOF文件并删除原文件,使体积尽可能小。
BGREWRITEAOF原理和缺陷:
原理:类似于BGSAVE,redis创建子进程负责对AOF文件重写。
缺陷:1、创建子进程导致的性能问题和内存占用问题依然存在。2、更糟糕的是,如果不加以控制,AOF文件体积可能比快照文件的体积大好几倍,在进行重写和删除旧文件时候,也可能导致系统长时间挂起。
如果人为不好控制什么时候发送BGREWRITEAOF命令,可以在配置文件中通过配置 auto-aof-rewrite-percentage 和 auto-aof-rewrite-min-size 来自动执行该命令。
如配置中第4和第5条的配置,意思就是:在启用AOF持久化的前提下,如果AOF文件体积大于64MB,并且,该文件比上一次重写后的体积大了至少1倍(100%)的时候,redis将执行BGREWRITEAOF命令。
最后,为了数据不丢失,最好将持久化后的文件多备份,如果条件允许,最好备份在不同的服务器上。到这里,对redis的持久化作了一个较为全面的总结,以后有新的认识再深入。
- redis深入—持久化
- 深入分析redis持久化
- 深入分析Redis持久化
- 深入剖析Redis RDB持久化机制
- 深入剖析Redis RDB持久化机制
- 深入剖析Redis RDB持久化机制
- 深入剖析Redis RDB持久化机制
- 深入剖析Redis RDB持久化机制
- 深入分析redis持久化(转)
- 深入剖析 redis AOF 持久化策略
- redis的aof持久化深入解析
- 深入剖析Redis RDN持久化机制
- 深入剖析Redis RDB持久化机制
- 深入剖析Redis RDB持久化机制
- 【redis】redis 持久化
- 【redis】redis持久化
- redis---Redis持久化
- 深入理解Redis的持久化机制和原理
- 使用 Gitbook 打造你的电子书
- HDU
- 堆排序
- spring mvc 返回json类型设置
- hibernate集合查询报错:ora-03113:end-of-file on communication channel
- redis深入—持久化
- u3d 一个工程编译一半强制结束进程导致的问题
- Android网络图片加载框架的选择
- python 解压可迭代对象给多个变量
- Q:关于栈的常见问题
- 获取另一个项目的图片显示
- 行为驱动开发
- Win form Control.Invoke 探索
- 实现网易新闻框架的搭建