编译Redis源码时,常因GCC版本过低、依赖库缺失或系统资源不足导致失败。
sudo yum install centos-release-scl安装SCL源,再执行sudo yum install devtoolset-7安装GCC 7,最后通过scl enable devtoolset-7 bash启用新编译器;sudo yum install -y tcl jemalloc,确保tcl(测试工具)和jemalloc(内存分配器)已安装;free -m查看内存剩余(建议至少1GB),df -h检查磁盘空间(建议预留10GB以上)。redis.conf配置错误(如bind、daemonize、requirepass等)会导致Redis无法启动或运行异常。
bind:若需远程访问,设置为0.0.0.0(监听所有接口);仅本地访问则保留127.0.0.1;daemonize:生产环境建议设置为yes(后台运行);requirepass:取消注释并设置强密码(如requirepass YourStrongPassword123),避免未授权访问;protected-mode:若允许远程连接,需设置为no(但需配合防火墙或SSL增强安全性)。开启远程连接(bind 0.0.0.0)但未采取安全措施,可能导致Redis被非法访问。
requirepass配置复杂密码(包含大小写字母、数字和符号);firewall-cmd --permanent --add-port=6379/tcp开放Redis端口(默认6379),再执行firewall-cmd --reload生效;protected-mode设置为no(但建议仅在安全网络环境下使用)。当Redis使用内存超过maxmemory限制时,会报错“OOM command not allowed”,导致写操作失败。
maxmemory:在redis.conf中添加maxmemory 2gb(根据服务器内存调整,建议预留20%以上空间);maxmemory-policy allkeys-lru(最近最少使用策略,优先删除不常用键),避免内存耗尽。Redis无法启动或客户端无法连接,常因端口被占用或bind地址配置错误。
netstat -tuln | grep 6379,若端口被占用,修改redis.conf中的port为其他端口(如6380);bind设置为正确的IP(如127.0.0.1或服务器公网IP),若为空则监听所有接口。Redis无法写入数据或日志,通常因目录/文件权限不足(Redis用户无读写权限)。
/var/lib/redis,运行chown -R redis:redis /var/lib/redis将所有权赋予Redis用户;/var/log/redis/redis.log,运行chown redis:redis /var/log/redis/redis.log并设置权限为640(chmod 640 /var/log/redis/redis.log)。Redis执行慢查询(如大key操作)时,会导致响应延迟升高。
redis.conf中设置slowlog-log-slower-than 10000(执行时间超过10ms的命令记为慢查询)和slowlog-max-len 128(保留最近128条慢查询记录);slowlog get命令查看慢查询详情,优化慢查询语句(如拆分大key、避免KEYS *等全表扫描命令)。从节点无法同步主节点数据,常报错“READONLY You can’t write against a read only replica”或“SYNC with master failed”。
ping通主节点IP;redis.conf中添加slaveof 主节点IP 6379,或运行redis-cli -h 主节点IP -p 6379 replicaof 主节点IP 6379;replica-read-only no(但会破坏数据一致性,不建议生产环境使用)。RDB或AOF文件损坏时,Redis启动会报错“Bad file format reading the append only file”或“Failed loading the RDB file”。
dump.rdb.bak),将其复制到数据目录(默认/var/lib/redis)并重命名;dump.rdb或appendonly.aof文件(Redis启动时会生成新的空文件);redis-check-rdb(检查RDB文件)或redis-check-aof(检查AOF文件)工具验证文件完整性。Redis服务无法启动,无日志输出或报错信息不明确。
/var/log/redis/redis.log,使用tail -f /var/log/redis/redis.log实时查看启动错误;redis-cli config get *查看当前配置,或运行redis-server /etc/redis.conf --test-memory 1测试配置文件语法;systemctl restart redis(Systemd系统)或service redis restart(SysVinit系统)重启服务,或redis-cli config reload重载配置(无需重启)。