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