Redis 是一个完全开源免费的,遵守BSD协议,高性能的key-value数据库。
Redis与其他k-v缓存产品相比有以下三个特点:
- 支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
- 不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
- 支持数据的备份,即master-slave模式的数据备份。
Redis两种持久化方式:
(1)RDB:snapshotting
- 以二进制格式,按事先定制的策略,周期性地将数据从内存同步至磁盘,数据文件默认为dump.rdb。
- 客户端显式使用SAVE或BGSAVE命令来手动启动快照保存机制:
- SAVE:同步, 即在主线程中保存快照,此时会阻塞所有客户端请求
- BGSAVE:异步,后台启动快照线程,服务不受影响
RDB相关的配置:
save <seconds> <changes> 触发快照的策略
save 900 1 #第一级匹配
save 300 10 : 达不到第三个就匹配第二级
save 60 10000 : 60秒内有10000个键发生更改就触发快照
#表示:三个策略满足其中任意一个均会触发SNAPSHOTTING操作;
900s内至少有一个key有变化,300s内至少有10个key有变化,
60s内至少有1W个key发生变化;
其他参数
- stop-writes-on-bgsave-error yes : dump操作出现错误时,是否禁止新的写入操作请求;
- rdbcompression yes :压缩存放,节约I/O
- rdbchecksum yes ;校验
- dbfilename dump.rdb:指定rdb文件名
- dir /var/lib/redis:rdb文件的存储路径
(2)AOF:Append Only File, fsync
记录每次写操作至指定的文件尾部实现的持久化,当redis重启时,可通过重新执行文件中的命令在内存中重建出数据库,
BGREWRITEAOF:AOF文件重写
不会读取正在使用的AOF文件,而是通过将内存中的数据以命令的方式保存至临时文件中,完成之后替换原来的AOF文件;
AOF相关的配置
appendonly no :默认禁用
appendfilename “appendonly.aof” :
appendfsync :将aof文件的缓冲区数据同步到磁盘,防止故障导致数据丢失,同步频繁会导致I/O负载过大,可以同步方式如下:
no:redis:不执行主动同步操作,而是OS进行;
everysec:每秒一次;
always:每语句一次;
no-appendfsync-on-rewrite no :是否在后台执行aof重写期间不调用fsync,默认为no,表示调用
auto-aof-rewrite-percentage 100 :对aof文件变化量的控制
auto-aof-rewrite-min-size 64mb :对aof规定大小最小达到64MB才重写
上述两个条件同时满足时,方会触发重写AOF;与上次aof文件大小相比,其增长量超过100%,且大小不少于64MB;
- aof-load-truncated yes :装载aof文件时如果有残缺部分则自动修剪(清理掉)
- 注意:持久机制本身不能取代备份;应该制订备份策略,对redis库定期备份;
两种存储方式最好不要同时启用,RDB与AOF同时启用特点如下:
- BGSAVE和BGREWRITEAOF不会同时进行;
- Redis服务器启动时用持久化的数据文件恢复数据,会优先使用AOF;