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

 

posted @ 2021-01-29 14:52  Tracydzf  阅读(93)  评论(0编辑  收藏  举报