# 时间策略
save 900 1 #表示900 秒内如果至少有 1 个 key 的值变化,则保存
save 300 10 #表示300 秒内如果至少有 10 个 key 的值变化,则保存
save 60 10000 #表示60 秒内如果至少有 10000 个 key 的值变化,则保存
# 设置快照的文件名,默认是 dump.rdb
dbfilename dump.rdb
# 设置快照文件的存放路径,这个配置项一定是个目录,而不能是文件名。默认是和当前配置文件保存在同一目录。也就是说通过在配置文件中配置的 save 方式,当实际操作满足该配置形式时就会进行 RDB 持久化,将当前的内存快照保存在 dir 配置的目录中,文件名由配置的 dbfilename 决定。
dir /home/work/app/redis/data/
# 默认值为yes。当启用了RDB且最后一次后台保存数据失败,Redis是否停止接收数据。这会让用户意识到数据没有正确持久化到磁盘上,否则没有人会注意到灾难(disaster)发生了。如果Redis重启了,那么又可以重新开始接收数据了
stop-writes-on-bgsave-error yes
# 默认值是yes。对于存储到磁盘中的快照,可以设置是否进行压缩存储。如果是的话,redis会采用LZF算法进行压缩。如果你不想消耗CPU来进行压缩的话,可以设置为关闭此功能,但是存储在磁盘上的快照会比较大。
rdbcompression yes
# 默认值是yes。在存储快照后,我们还可以让redis使用CRC64算法来进行数据校验,但是这样做会增加大约10%的性能消耗,如果希望获取到最大的性能提升,可以关闭此功能。
rdbchecksum yes
除了根据redis配置文件配置规则自动触发,还有下面三种触发方式:
1、从节点全量复制时,主节点发送一个rdb文件给从节点完成复制操作时,主节点会触发bgsave。
2、执行debug reload时自动触发RDB持久化。
3、执行shutdown时,若没有开启aof 也会触发RDB持久化。

fork 操作会阻塞,导致Redis读写性能下降。我们可以控制单个Redis实例的最大内存,来尽可能降低Redis在fork时的事件消耗。以及上面提到的自动触发的频率减少fork次数,或者使用手动触发,根据自己的机制来完成持久化。RDB 格式。# 是否开启aof
appendonly yes
# 文件名称
appendfilename "appendonly.aof"
# 同步方式
appendfsync everysec
#always:每次命令写入aof_buffer后都会调用fsync同步到aof文件,fsync完成后线程才返回。线程每次都会等fsync完成后才返回,性能较差,数据安全性最高
#everysec:命令先写入aof_buffer,然后调用系统write操作,write操作完成后线程就返回,由后台专门的线程每秒执行一次fsync操作。推荐使用;最多丢失2s内的数据。
#no:命令先写入到aof_buffer,然后调用系统write操作,write操作后线程返回,fsync操作由操作系统负责,时间不确定。fsync由系统负责,数据安全性无法确保,并且会加大每次fsync同步到硬盘的数据量。不推荐
# aof重写期间是否同步
no-appendfsync-on-rewrite no
# 重写触发配置
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
# 加载aof时如果有错如何处理
aof-load-truncated yes
#如果该配置启用,在加载时发现aof尾部不正确是,会向客户端写入一个log,但是会继续执行,如果设置为 `no` ,发现错误就会停止,必须修复后才能重新加载。
# 文件重写策略
aof-rewrite-incremental-fsync yes
appendfsync everysec 配置,会有1s损耗),第二步是对aof文件的重写(重写是直接把当前内存的数据生成对应命令)。(bgrewriteaof)或者自动触发(根据配置规则触发)。
appen-only 模式写入性能比较高;基本上都不会是单独使用每一种方式解决持久化的。因为都存在问题。4.0版本的混合持久化默认关闭的,通过aof-use-rdb-preamble配置参数控制,yes则表示开启,no表示禁用,5.0之后默认开启。混合持久化是通过bgrewriteaof完成的,不同的是当开启混合持久化时,fork出的子进程先将共享的内存副本全量的以RDB方式写入aof文件,然后在将重写缓冲区的增量命令以AOF方式写入到文件,写入完成后通知主进程更新统计信息,并将新的含有RDB格式和AOF格式的AOF文件替换旧的的AOF文件。简单的说:新的AOF文件前半段是RDB格式的全量数据后半段是AOF格式的增量数据,
优点: 混合持久化结合了RDB持久化 和 AOF 持久化的优点, 由于绝大部分都是RDB格式,加载速度快,同时结合AOF,增量的数据以AOF方式保存了,数据更少的丢失。
缺点: 兼容性差,一旦开启了混合持久化,在4.0之前版本都不识别该aof文件,同时由于前部分是RDB格式,阅读性较差
Redis 可以看作是一个内存数据库,通过 Maxmemory 指令配置 Redis 的数据集使用指定量的内存。设置 Maxmemory 为 0,则表示无限制。当内存使用达到 Maxmemory 极限时,需要使用某种淘汰算法来决定清理掉哪些数据,以保证新数据的存入。
noeviction:禁止驱逐数据,也就是当内存不足以容纳新入数据时,新写入操作就会报错,请求可以继续进行,线上任务也不能持续进行,采用no-enviction策略可以保证数据不被丢失,这也是系统默认的一种淘汰策略。allkeys-lru:从数据集中挑选最近最少使用的数据淘汰,该策略要淘汰的key面向的是全体key集合,而非过期的key集合。volatile-lru:除了淘汰机制采用LRU,策略基本上与volatile-lru相似,从设置过期时间的数据集中挑选将要过期的数据淘汰,ttl值越大越优先被淘汰。allkeys-random:从数据集中选择任意数据淘汰。volatile-random:从已设置过期时间的数据集中任意选择数据淘汰。当内存达到限制无法写入非过期时间的数据集时,可以通过该淘汰策略在主键空间中随机移除某个key。volatile-ttl:除了淘汰机制采用LRU,策略基本上与volatile-lru相似,从设置过期时间的数据集中挑选将要过期的数据淘汰,ttl值越大越优先被淘汰。 # redis.conf
#配置Redis的内存大小
maxmemory 100mb
# 配置淘汰策略
maxmemory-policy volatile-lru
原文:https://www.cnblogs.com/yangk1996/p/12686148.html