Redis在Ubuntu上的故障排查指南
首先确认Redis服务是否正在运行,使用以下命令查看服务状态:
sudo systemctl status redis-server
若服务未运行(显示“inactive”或“failed”),需进一步排查;若正在运行但仍有问题,可尝试重启服务:sudo systemctl restart redis-server。
Redis日志是排查故障的核心依据,默认日志文件路径为/var/log/redis/redis-server.log。使用以下命令实时查看最新日志:
tail -f /var/log/redis/redis-server.log
或通过journalctl查看系统日志:
sudo journalctl -u redis-server.service
日志中会明确提示错误原因(如端口占用、配置文件错误、权限问题等)。
Redis配置文件/etc/redis/redis.conf的错误会导致服务无法启动。重点检查以下参数:
port 6379,确保未被注释且数值合法;bind 127.0.0.1(仅本地访问)或bind 0.0.0.0(允许远程访问,生产环境需谨慎);dir /var/lib/redis,确保目录存在且Redis用户(通常为redis)有读写权限;daemonize no(与systemd服务配合,若为“yes”可能导致冲突)。sudo systemctl restart redis-server。Redis默认使用6379端口,若该端口被其他进程占用,会导致启动失败。使用以下命令检查端口占用情况:
sudo ss -ltnp | grep 6379
或
sudo lsof -i :6379 -sTCP:LISTEN
若端口被占用,可通过以下方式解决:
sudo kill -9 <PID>(替换为实际进程ID);/etc/redis/redis.conf,将port改为其他数值(如6380),然后重启服务。Redis是内存数据库,系统内存不足会导致启动失败或性能下降。使用以下命令检查内存使用情况:
free -m
若内存不足,可尝试以下方法:
/etc/redis/redis.conf,修改maxmemory参数(如maxmemory 2gb);maxmemory-policy(如volatile-lru,淘汰最近最少使用的键)。Redis需要访问配置文件、数据目录和日志文件的权限。确保redis用户对以下路径有读写权限:
/etc/redis/redis.conf;/var/lib/redis;/var/log/redis。sudo chown -R redis:redis /var/lib/redissudo chmod 755 /var/lib/redis若系统启用了SELinux或AppArmor,可能会拦截Redis的操作。
sudo aa-status;sudo aa-complain /etc/apparmor.d/usr.sbin.redis-server;/etc/apparmor.d/usr.sbin.redis-server),添加所需权限,然后重启AppArmor:sudo systemctl restart apparmor。AUTH <password>命令认证(密码在/etc/redis/redis.conf的requirepass参数中设置);systemctl status),并开放端口:sudo ufw allow 6379;requirepass参数并重新认证。HGET)。检查键的数据类型(TYPE <key>),使用正确命令;FLUSHALL被rename-command禁用)。检查配置文件中的rename-command设置。maxmemory限制,或启用淘汰策略(如volatile-lru);sudo mkdir -p /var/lib/redis,sudo chown -R redis:redis /var/lib/redis;/etc/redis/redis.conf中是否有重复的port、bind等指令,删除重复项;/var/lib/redis/dump.rdb或appendonly.aof),重启Redis后会生成新文件(注意:删除前需备份数据)。