错误描述:客户端尝试连接Redis服务器时,出现“Connection refused”错误。
解决方法:
systemctl status redis查看服务状态,若未启动则执行systemctl start redis。redis.conf配置:确保bind参数设置为允许客户端访问的IP(如0.0.0.0允许所有IP,或指定具体IP);若启用了protected-mode(默认开启),需设置强密码(requirepass yourpassword)或关闭保护模式(protected-mode no,仅测试环境使用)。错误描述:Redis报错“OOM command not allowed when used memory exceeds ‘maxmemory’”,表示内存使用超过限制。
解决方法:
redis.conf中的maxmemory参数(如maxmemory 4gb),限制Redis最大内存使用;修改后需重启服务或通过CONFIG SET maxmemory 4gb动态生效。maxmemory-policy参数(如allkeys-lru淘汰最近最少使用的所有键,volatile-lru淘汰设置了过期时间的最近最少使用键),避免内存满时无法写入。EXPIRE key seconds为临时数据设置过期时间,定期清理无用键(DEL key或SCAN+DEL批量删除);优先使用Hash等高效数据结构替代String(如用HSET存储对象属性)。错误描述:Redis无法启动或运行异常,提示“Invalid argument”“Syntax error”等配置错误。
解决方法:
redis-cli config test命令验证redis.conf的语法正确性,若有错误会提示具体行号。bind(监听IP)、port(端口)、daemonize(后台模式,设为yes)、logfile(日志路径,需可写)等参数符合需求。/var/log/redis/redis.log),获取详细的错误信息(如配置项冲突、路径不存在)。错误描述:执行systemctl start redis后,服务无法启动,无日志输出或提示“Failed to start”。
解决方法:
journalctl -xe或cat /var/log/redis/redis.log查看具体错误(如端口冲突、权限不足、依赖缺失)。netstat -tuln | grep 6379或lsof -i:6379检查端口是否被其他进程占用,若有则终止占用进程(kill -9 PID)。/usr/local/redis)、数据目录(/var/lib/redis)、日志文件有读写权限(chown -R redis:redis /var/lib/redis,chmod -R 770 /var/lib/redis)。错误描述:Redis执行命令耗时过长,影响性能(如查询响应时间超过100ms)。
解决方法:
redis.conf中设置slowlog-log-slower-than(慢查询阈值,单位微秒,默认10ms)和slowlog-max-len(日志长度,如slowlog-log-slower-than 10000表示超过10ms的查询);使用SLOWLOG GET命令查看慢查询记录(如redis-cli SLOWLOG GET 10查看最近10条)。HGETALL替代多次GET)、拆分大Key(如将大Hash拆分为多个小Hash)。CONFIG SET latency-monitor-threshold 100设置延迟阈值(单位毫秒),通过LATENCY LATEST查看延迟事件。错误描述:从节点无法同步主节点数据,报错“READONLY You can’t write against a read only replica”或“Sync with master failed”。
解决方法:
ping 主节点IP,telnet 主节点IP 6379)。redis.conf中设置replicaof 主节点IP 端口(如replicaof 192.168.1.100 6379),或通过命令redis-cli replicaof 主节点IP 端口动态设置;若需从节点可写(不推荐生产环境),设置replica-read-only no。requirepass(设置密码),从节点需配置masterauth 主节点密码(认证密码)。错误描述:编译Redis源码时提示“gcc: command not found”或“version `GLIBCXX_3.4.xx’ not found”。
解决方法:
sudo yum install centos-release-scl添加SCL仓库,然后安装devtoolset(如sudo yum install devtoolset-9-gcc devtoolset-9-gcc-c++),通过scl enable devtoolset-9 bash激活新环境(临时生效);或修改~/.bashrc添加scl enable devtoolset-9 bash(永久生效)。sudo yum install -y tcl jemalloc,确保编译所需的依赖库已安装。错误描述:允许远程连接Redis,但未采取安全措施,存在密码泄露、未授权访问风险。
解决方法:
redis.conf中取消requirepass注释,设置复杂密码(如包含大小写字母、数字、特殊字符,长度≥12位)。firewall-cmd --permanent --add-port=6379/tcp开放Redis端口,firewall-cmd --reload生效;或通过iptables限制访问IP(如iptables -A INPUT -p tcp -s 客户端IP --dport 6379 -j ACCEPT)。tls-port配置,加密客户端与服务器之间的通信(需生成证书并配置tls-cert-file、tls-key-file等参数)。