什么是持久化
Redis高性能的原因是将所有的数据都存储到了内存中,位于内存中的数据在机器重启之后就会全部丢失,所以为了使得redis在重启之后仍能保证数据不丢失,需要将数据从内存中同步到硬盘,这一过程就是持久化。
Redis持久化的方案
Redis的持久化方案有两种
- RDB持久化
- AOF持久化
在redis中,两种方案可以单独使用,也可将二者结合在一起使用。
RDB持久化
优点:整个Redis数据库中只包含一个文件,对于文件备份而言非常完美!
缺点:
- 在数据还没有进行持久化之前,服务器如果宕机,这将造成没来得及写入磁盘的数据丢失
- RDB内部是通过fork子进程来协助完成数据持久化工作的,因此当数据集较大时,可能会导致服务器停止服务几百毫秒甚至是一秒钟,这对于并发量大的系统是无法接受的
触发条件
- 客户端执行save和bgsave命令会生成快照
- 根据配置文件save m n规则进行自动快照
- 主从复制时,从库全量复制同步主库数据,此时主库会执行bgsave命令进行快照
- 客户端执行数据库清空命令FLUSHALL时,会触发快照
- 客户端执行shutdown关闭redis时,会触发快照
RDB持久化的配置
windows下,配置文件名为redis.windows.conf。
常用配置项如下:
- save m n ,配置快照触发规则,其中m表示秒,n表示key值最少改变次数,比如,save 800 2,就是说800秒内至少有2个key被改变则作一次快照。
- dbfilename dump.rdb ,持久化存储数据库文件名,默认为dump.rdb
- stop-writes-on-bgsave-error yes,yes代表当使用bgsave命令持久化出错时停止写RDB快照文件,no则相反
- rdbcompression yes,在写入文件和读取文件时是否开启rdb文件检查、检查是否有损坏,如果在启动时检查发现损坏,则停止启动
- dir “./”,配置文件存放目录
- rdbchecksum yes,是否开启RDB压缩,该功能可以减少文件大小,节约磁盘空间
AOF持久化
为了降低redis故障而引起的数据丢失,redis提供了AOF(append only file)持久化,从字面意思上来说,就是将命令追加到文件。AOF可以将redis执行的每一条命令追加到磁盘文件中,在redis启动的时候优先选择从AOF文件中恢复数据。由于每次的写操作,redis都会记录到文件中,所以开启AOF持久化会对性能造成一定的影响。
AOF配置
默认情况下,redis是关闭aof持久化机制的,开启方案:
可以在redis.windows.conf配置文件中将appendonly no改为appendonly yes。
配置持久化时机
在配置文件中修改appendfsync的值,always表示每执行一次更新命令,就持久化一次,everysec表示每秒钟持久化一次,no表示不持久化。
后续将介绍在java中如何使用redis