由于 maxmemory 和 maxmemory-policy 策略配置,我会删除一些数据,防止内存爆掉 。使用lazyfree-lazy-eviction yes表示使用 lazy free 机制,该场景开启 lazy free 可能会导致淘汰数据的内存释放不及时,出现内存超限 。
2、lazyfree-lazy-expire
对于设置了 TTL 的键,过期后删除 。如果想启用 lazy free 机制删除,则配置 lazyfree-lazy-eviction yes 。
3、lazyfree-lazy-server-del
针对有些指令在处理已存在的键时,会带有一个隐式的 DEL 键的操作 。
如 rename 命令,当目标键已存在,我会先删除目标键,如果这些目标键是一个 big key,那可能会出现阻塞删除的性能问题 。此参数设置就是解决这类问题,建议配置 lazyfree-lazy-server-del yes 开启 。
4、replica-lazy-flush
该配置针对 slave 进行全量数据同步,在加载 master 的 RDB 内存快照文件之前,会先运行 flashall清理数据的时候是否采用异步 flush 机制 。
推荐你使用 replica-lazy-flush yes配置,可减少全量同步耗时,从而减少 master 因输出缓冲区暴涨引起的内存增长 。
5、lazyfree-lazy-user-del
意思是是否将 DEL 指令的默认行为替换成 lazy free 机制删除,效果就跟 UNLINK 一样,只要配置成 lazyfree-lazy-user-del yes 。
6、lazyfree-lazy-user-flush
FLUSHDB, FLUSHALL, SCRIPT FLUSH, FUNCTION FLUSH可以使用额外参数 ASYNC|SYNC 决定使用同步还是异步操作,当没有指定这个可选项,可以通过 lazyfree-lazy-user-flush yes 表示使用异步删除 。
7、IO 多线程
大家知道我是单线程模型处理读写请求,但是有一些操作可以使用其他线程处理,比如 UNLINK,I/O 读写操作 。
在 6.0 版本,我提供了 I/O 多线程处理 Socket 读写,利用 I/O 多线程可以提高客户端 Socket 读写性能 。
默认配置是关闭的,我只建议当你的机器至少是 4 核 CPU 或者更多的情况启用,并且配置的线程数少于机器总 CPU 核数,配置超过 8 个线程对提升没什么帮助 。
当你的机器是四核 CPU,那可以尝试配置使用 2~3 个 I/O 线程,如果是 8 核 CPU,一般只需要配置 6 个线程 。
如下配置表示开启 I/O 线程组,线程组的 I/O 线程数量为 3 。
io-threads-do-reads yesio-threads 3
七、AOF 持久化除了 RDB 内存快照文件作为持久化手段以外,还能使用 AOF(Append only file) 实现持久化,AOF 是一种可选的持久化策略提供更好数据安全性 。默认配置下,我最多只会丢失一秒的数据,你甚至可以配置更高级别,最多只丢失一次 write 操作,但这样会对损耗性能 。
1、appendonly
appendonly yes 表示开启 AOF 持久化,可以同时开启 AOF 和 RDB 内存快照持久化,如果开启了 AOF ,我会先加载 AOF 用于恢复内存数据 。
2、appendfilename
指定 AOF 文件名称,默认名字是 appendonly.aof 。为了方便,你可以配置 appenddirname 指定 AOF 文件存储目录 。
3、appendfsync
调用操作系统的 fsync()函数告诉操作系统把输出缓冲区的数据持久化到磁盘,AOF 文件刷写的频率有三种 。
- no:不去主动调用 fsync(),让操作系统自己决定何时写磁盘 。
- always:每次 write 操作之后都调用 fsync(),非常慢,但是数据安全性最高 。
- everysec:每秒调用一次 fsync(),一个折中的策略,最多丢失一秒的数据 。
4、no-appendfsync-on-rewrite
当 appendfsync 的配置设置成 always或者 everysec ,现在有一个后台 save 进程(可能是生成 RDB 内存快照的 bgsave 进程,也有可能是 AOF rewrite 进程)正在进行大量的磁盘 I/O 操作,会造成调用 fsync()执行太长,后续其他想要调用 fsync() 的进程就会阻塞 。
为了缓解这个问题,可以使用以下配置 no-appendfsync-on-rewrite yes 表示当已经有 bgsave和bgrewriteaof 后台进程在调用 fsync() 时,不再开启新进程执行 AOF 文件写入 。
这样的话,就会出现当前有子进程在做 bgsave 或者其他的磁盘操作时,我就无法继续写 AOF 文件,这意味着可能会丢失更多数据 。
如果有延迟问题,请将此选项改为 yes 。否则将其保留为 no 。从持久化的角度来看,no是最安全的选择 。
推荐阅读
- 职业教育|热血江湖手游:经典五大职业设定,公测火爆开启,两大门派争霸,谁能成为江湖第一?
- “魔兽”退场 两代玩家告别青春
- 华晨宇|有一种“差距”叫邓紫棋和华晨宇,分手5年后,两人现状天差地别
- 王思聪|王思聪与网红喝下午茶,女方被扒已婚有娃,两人关系引发猜测
- 华晨宇|华晨宇王悦伊高调秀恩爱,两人穿情侣装、戴情侣口罩,细节好浪漫
- 陈乔恩|陈乔恩和Alan晒照秀幸福,甜喊老公老婆示爱,两人越来越有夫妻相
- 林青霞|林青霞邀请作家莫言家中做客,吃水饺喝茅台,两人同龄像隔代人!
- 梦中的那片海|68岁林青霞看京剧,和大师交头接耳显亲密,两位友人都戴千万翡翠
- 王思聪|王思聪带俩美女玩剧本杀,大热天套两件T恤,同回酒店当护花使者
- 李明|女同事请吃饭,喊两位闺蜜一起,吃完准备离开就被服务员拦了下来!