错误表现:Redis无法启动,或客户端连接时报“Connection refused”。
原因:Redis配置文件(redis.conf)中的port设置与系统中其他应用程序(如MySQL、Nginx)的端口冲突。
解决方法:
netstat -tuln | grep <端口号>(如netstat -tuln | grep 6379)检查端口占用情况;redis.conf中的port为未被占用的端口(如6380);sudo systemctl restart redis。错误表现:无法从远程客户端连接Redis(本地连接正常)。
原因:redis.conf中的bind默认设置为127.0.0.1(仅允许本地访问),未允许远程IP连接。
解决方法:
bind设置为0.0.0.0(注意:需配合防火墙配置,存在安全风险);bind设置为该IP(如bind 192.168.1.100);错误表现:客户端连接时报“NOAUTH Authentication required”或“invalid password”。
原因:redis.conf中启用了requirepass(如requirepass yourpassword),但客户端连接时未提供正确密码,或密码拼写错误。
解决方法:
redis.conf中的requirepass值(去掉注释);-a参数指定密码(如redis-cli -h 127.0.0.1 -p 6379 -a yourpassword);redis-cli修改:config set requirepass newpassword(需重启Redis使永久生效)。错误表现:Redis无法启动,或报“Permission denied”(无法写入数据/日志)。
原因:redis.conf中指定的dir(数据目录,默认./)或logfile(日志文件路径,默认stdout)权限不足,Redis进程无权读写。
解决方法:
dir和logfile的路径(如dir /var/lib/redis、logfile /var/log/redis/redis.log);redis):sudo chown -R redis:redis /var/lib/redis、sudo chown redis:redis /var/log/redis/redis.log;sudo chmod -R 755 /var/lib/redis。错误表现:Redis报错“OOM command not allowed when used memory exceeds ‘maxmemory’”,无法写入数据。
原因:redis.conf中未设置maxmemory(或设置过小),导致Redis使用的内存超过系统或配置的限制。
解决方法:
maxmemory为合理值(如maxmemory 2gb,根据服务器内存调整);maxmemory-policy(内存淘汰策略),推荐allkeys-lru(淘汰最近最少使用的键)或volatile-lru(仅淘汰设置了过期时间的键);错误表现:Redis无法启动,或报“Bad directive or wrong number of arguments”(无效指令或参数数量错误)。
原因:redis.conf中存在语法错误(如注释格式错误、参数拼写错误、缺少值)。
解决方法:
vim)检查redis.conf,确保:
#开头;参数名 参数值(如port 6379,无多余空格);redis-cli config get *命令查看当前生效配置,对比redis.conf排查差异;错误表现:修改redis.conf后,更改未生效(如端口、密码、内存限制等)。
原因:Redis未重新加载配置(config reload)或重启服务。
解决方法:
redis-cli config reload命令重载配置(无需重启,立即生效);sudo systemctl restart redis(Systemd系统)或sudo service redis restart(SysVinit系统)。错误表现:Redis无法启动,或报“Permission denied”(即使权限正确)。
原因:SELinux(安全增强模块)阻止Redis访问某些资源(如数据目录、端口)。
解决方法:
sestatus(若为Enforcing,需调整);sudo setenforce 0;/etc/selinux/config,将SELINUX=enforcing改为SELINUX=disabled(需重启服务器);sudo semanage port -a -t redis_port_t -p tcp 6379(允许Redis端口)。错误表现:编译Redis源码时报“gcc: command not found”或“make[3]: gcc: command not found”,或编译失败。
原因:CentOS默认GCC版本过低(如CentOS 7默认GCC 4.8),无法编译Redis(需要GCC 5.3及以上)。
解决方法:
sudo yum groupinstall "Development Tools";sudo yum install centos-release-scl、sudo yum install devtoolset-9-gcc devtoolset-9-gcc-c++;scl enable devtoolset-9 bash(临时生效),或修改~/.bashrc永久生效;make && sudo make install。错误表现:从节点写入数据时报“READONLY You can’t write against a read only replica”。
原因:Redis主从复制模式下,从节点默认是只读的(replica-read-only yes),防止数据不一致。
解决方法:
redis.conf中的replica-read-only为no,并重启从节点;