Redis开发陷阱及避坑指南
Linux 配置优化
我们在使用 Redis 过程中,可能更多的关注 Redis 本身的一些配置优化,如 AOF、RDB 配置、数据结构配置优化等。
但是很少关心 Redis 的载体,服务器的优化。而这往往为我们的项目运行带来灾难性的打击。因此服务器优化也是必不可少的
内存分配控制
Redis启动时,可能会出现下面的日志
# WARNING overcommit_memory is set to 0! Background save may fail under low memory condition.
To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
overcommit 是 Linux 的一种内存处理机制:Linux 对绝大多数内存申请都会回复 yes,以便运行更多的程序。因为申请内存后,并不会马上使用内存。这种机制就是 overcommit 。
而 overcommit_memory 是用来设置内存分配策略的,有三种取值
ble data-draft-node="block" data-draft-type="table" data-size="normal" data-row-style="normal">
日志中 Background save 指的是 bgsave 和 bgrewriteaof 。根据操作系统的配置,如果 overcommit_memory 设置为 0 则可能会造成内存申请失败而导致后台持久化失败。
因此 Redis 建议将这个值设置为 1 是为了 fork 操作在低内存下也能执行成功。
设置方法
通过命令修改,立即生效。重启后会失效
sysctl vm.overcommit_memory=1
再将改动写入系统配置文件,使其永久有效
echo "vm.overcommit_memory=1" >> /etc/sysctl.conf
建议
采用 Redis 建议的配置是为了在极端情况下 Linux 可以挤出来一些内存供 Redis 备份,但是更建议优先配置好 maxmemory ,给机器留 20%~30% 的空闲内存
使用NTP 同步时间
在集群或哨兵环境中,多台服务器使用相同的网络时间协议同步时间能更方便的阅读日志,排查问题
可以设置定时任务同步时间
crontab -u //设定某个用户的cron服务 crontab -l //列出某个用户cron服务的详细内容 crontab -r //删除某个用户的cron服务 crontab -e //编辑某个用户的cron服务 crontab -i //打印提示,输入yes等确认信息
添加每小时执行一次的任务
0 * * * * /usr/sbin/ntpdate cn.pool.ntp.org > dev/null 2>&1