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;