Redis持久化和事务
持久化
利用永久性存储介质将数据进行保存,在特定的时间将保存的数据进行恢复的工作机制称为持久化。防止数据的意外丢失,确保数据安全性。
Redis提供了持久化的机制,分别是
- RDB(Redis DataBase):将当前数据状态进保存,快照形式,存储数据结果,存储格式简单,关注点在数据。
- AOF(Append Only File):将数据的操作过程进行保存,日志形式,存储操作过程,存储格式复杂,关注点在数据的操作过程。
RDB
RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘。也是默认的持久化方式,这种方式是就是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb。
RDB提供了三种触发机制来进行保存快照:
- save指令触发
- bgsave指令触发
- 自动触发
save指令
- 命令:
save
- 作用:手动执行一次保存操作
redis是单线程的,所有当执行save命令的时候不能处理其他命令,所以改命令会阻塞当前的redis服务器。如果需要持久化的数据量较大的时候,就会导致后续指令长时间等待。所以这种方式不可取。
bgsave指令
- 命令:
bgsave
- 作用:手动启动后台保存操作,但不立即执行
Redis会在后台异步进行快照操作,快照同时还可以响应客户端请求。具体操作是Redis进程执行fork操作创建子进程,RDB持久化过程由子进程负责,完成后自动结束。阻塞只发生在fork阶段,一般时间很短。基本上 Redis 内部所有的RDB操作都是采用 bgsave 命令。
bgsave命令是针对save阻塞问题做的优化。Redis内部所有涉及到RDB操作都采用bgsave的方式,save命令可以放弃使用。
save配置
- 配置:save second changes
- 参数:
- second:监控时间范围
- chagnes:监控key的变化量
- 作用:满足限定时间范围内key的变化数达到指定数量即进行持久化。
RDB的持久化配置
时间策略
save 900 1
save 300 10
save 60 10000
表示900 秒内如果至少有 1 个 key 的值变化,则进行bgsave。
表示300 秒内如果至少有 10 个 key 的值变化,则进行bgsave。
表示60 秒内如果至少有 10000 个 key 的值变化,则进行bgsave。
文件名称
dbfilename dump.rdb
设置快照的文件名,默认是 dump.rdb
文件保存路径
dir /home/work/app/redis/data/
设置快照文件的存放路径,这个配置项一定是个目录,而不能是文件名。
如果持久化出错,主进程是否停止写入
stop-writes-on-bgsave-error yes
默认值为yes。当启用了RDB且最后一次后台保存数据失败,Redis是否停止接收数据。这会让用户意识到数据没有正确持久化到磁盘上,否则没有人会注意到灾难(disaster)发生了。如果Redis重启了,那么又可以重新开始接收数据了.
是否压缩
rdbcompression yes
默认值是yes。对于存储到磁盘中的快照,可以设置是否进行压缩存储。
导入时是否检查
rdbchecksum yes
默认值是yes。在存储快照后,我们还可以让redis使用CRC64算法来进行数据校验,但是这样做会增加大约10%的性能消耗,如果希望获取到最大