阿里云上面的 Redis 256MB 版本今天刚好到期了,用了一年,觉得有点浪费就没续费了。

使用 lnmp.org 的脚本进行 Redis 安装,然而安装完之后并不能正常使用。

运行 redis-cli 的时候终端一直是没有响应的情况,为此折腾了半个小时,终于部署成功了。

1. sysctl 参数调整

单独运行 redis-server 的时候会有下面的 Warning

WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.

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.

WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.

根据提示进行操作

vi /etc/sysctl.conf

# 添加
vm.overcommit_memory = 1
net.core.somaxconn = 2048

:wq!

sysctl -p

echo never > /sys/kernel/mm/transparent_hugepage/enabled # 并保存到 /etc/rc.local 中

现在 Redis-server 就能正常启动和关闭了。

2. 使用 redis-cli

前面提到运行 redis-cli 出现无反应的情况,后来发现是 iptables 的锅,配置是将 6379 这个端口给 Drop 了,为了避免开了之后引发不必要的安全问题,直接给 redis 换端口吧。

于是找到 redis 的配置文件 /usr/local/redis/etc/redis.conf

找到 port 字段,修改后面的端口号,

因为 redis-cli 现在还连不上,所以只能用 kill 命令来关闭 redis 了

使用 ps -ef | grep redis 找到进程号,使用 kill 杀进程。

然后再使用 redis-server /usr/local/redis/etc/redis.conf 启动 redis

最后再用 redis-cli -p [端口号] 登录即可

3. 为 Redis 添加密码

redis-cli -p [端口号] # 连接 redis

config set requirepass [密码]

auth [密码]

config get requirepass # 检测是否配置成功

# 如果返回

1) "requirepass"

2) "[密码]"

# 则使用成功

后记

现在本地的 redis 可以正常使用了,关于去年阿里云 99 一年的 Redis 的话对于我来说还是有点浪费,内存一直都只用了不到 20%,CPU 更是不到 2%,所以还是在部署在本地吧。