banner
李大仁博客

李大仁博客

天地虽大,但有一念向善,心存良知,虽凡夫俗子,皆可为圣贤。

[Redis] 解决Redis运行时Cannot save in background问题

Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。从 2010 年 3 月 15 日起,Redis 的开发工作由 VMware 主持。从 2013 年 5 月开始,Redis 的开发由 Pivotal 赞助。

Redis 运行时经常出现 Cannot save in background. 问题,通常因为两个原因 1.Redis 的占用的内存过大,导致 BGSAVE 时系统无法分配足够的内存给 BGSAVE 进程而导致错误。 碰到这种情况时,你可以这样操作,限制 Redis 的最大内存大小到系统内存的一半以内。 设置 redis 的内存可以在 redis.conf 中修改 maxmemory 属性

maxmemory # 系统实际安装内存的一半以内,实验环境的话建议不要超过 1/3

如果你机器的内存小但是硬盘速度够快(SSD 级别)的话可以开启 Redis 的 VM 功能, 否则建议直接关闭 VM 功能,实验环境可以直接关闭 VM

vm-enable no #关闭 VM

2. 两次触发 BGSAVE 的时间间隔过短,导致 BGSAVE 操作队列阻塞而出现错误。 碰到这种情况时,一般根据你的程序情况调整一下 Redis 的 BGSAVE 的触发策略就可以了, 在 redis.conf 中找到几条 save 开头的配置,根据要求进行相应的配置即可。 具体根据你的实际生产环境配置相应的策略。原则上以保证减少 BGSAVE 次数为目标

save 1000 1 #1000 秒内只要有 1 次更新就进行 save (低频)
save 250 10 #250 秒内只要有 10 次更新就进行 save(中频)
save 120 1000 #120 秒内只要有 1000 次更新就进行 save(高频)
save 40 10000 #40 秒内只要有 10000 次更新就进行 save(超高频,实验环境不需要配置)

第一个参数表示时间段,以秒为单位 第二个参数表示更新次数,以次为单位

最后,写入压缩属性可以设置到的打开状态,可以有效减少每次 BGSAVE 的硬盘写入时间

rdbcompression yes

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。