默认情况下,Redis仅允许本地连接(bind 127.0.0.1),且开启保护模式(protected-mode yes),这会阻止远程客户端访问。常见误区包括:
bind指令:仍保留bind 127.0.0.1,导致远程无法连接;protected-mode no但bind仍为127.0.0.1,仍无法远程访问;bind 0.0.0.0(允许所有IP),存在安全风险(易受非法访问)。/etc/redis/redis.conf:将bind 127.0.0.1改为bind 服务器IP(如bind 192.168.1.100),或保留bind 0.0.0.0(需配合防火墙限制IP);protected-mode no;sudo systemctl restart redis。Redis默认使用6379端口,若该端口被其他服务(如MySQL、Nginx)占用,或配置文件中port指令设置错误(如非数字、已被占用),会导致Redis无法启动。
解决方法:
sudo netstat -tuln | grep 6379,若被占用,终止占用进程(kill -9 <PID>)或修改Redis端口(port 6380);port指令值为有效数字(如port 6379),无多余空格或特殊字符。Redis是内存数据库,若未配置最大内存限制(maxmemory)或内存淘汰策略(maxmemory-policy),当内存耗尽时,Redis会崩溃或无法写入数据。常见误区包括:
maxmemory:导致内存无限增长,影响系统稳定性;noeviction(默认),内存满时写入操作会返回错误,影响业务。maxmemory(如maxmemory 2gb);allkeys-lru,淘汰最近最少使用的key,适用于缓存场景)。Redis提供**RDB(快照)和AOF(日志)**两种持久化方式,常见误区包括:
save间隔过长(如save 3600 1,1小时才保存一次),导致数据丢失风险增加;appendonly no(默认),无法记录每个写操作,恢复速度慢。save 900 1(900秒内至少1个key变化则保存)、dbfilename dump.rdb、dir /var/lib/redis;appendonly yes、appendfilename "appendonly.aof";Redis默认无密码认证(requirepass被注释),且protected-mode yes(仅本地访问),易受未授权访问攻击。常见误区包括:
requirepass仍为注释状态,任何人可连接并操作Redis;123456,易被破解;bind 0.0.0.0且未通过防火墙限制,导致公网可访问。requirepass注释并修改为复杂密码(如requirepass YourStrongPassword123);bind 服务器IP(而非0.0.0.0),并通过防火墙(ufw)限制允许访问的IP(如sudo ufw allow from 192.168.1.0/24 to any port 6379);Redis对配置文件的权限和路径敏感,常见误区包括:
chmod 777 /etc/redis/redis.conf,可能导致敏感信息泄露或被篡改;redis-server /wrong/path/redis.conf),导致配置未生效;/var/lib/redis),导致启动失败。sudo chmod 644 /etc/redis/redis.conf(所有者可读写,其他用户只读)、sudo chown redis:redis /etc/redis/redis.conf(所有者为redis用户);redis-server --config-file /etc/redis/redis.conf指定路径,或通过systemctl启动(默认读取/etc/redis/redis.conf);sudo chown -R redis:redis /var/lib/redis(确保Redis用户可读写)。修改配置文件后,若存在语法错误(如多余的空格、错误的参数值),Redis启动时会报错,但常见误区是未提前检查,导致反复排查启动问题。
解决方法:
redis-server /etc/redis/redis.conf --test-config,若输出Configuration loaded则表示语法正确;port后跟数字、bind后跟IP地址),避免多余字符。修改配置文件后,若未重载(config reload)或重启(systemctl restart redis)Redis服务,配置不会生效,导致修改无效。
解决方法:
timeout、loglevel),可使用redis-cli重载:redis-cli -h 服务器IP -a 密码 config reload;port、bind),则重启服务:sudo systemctl restart redis;sudo systemctl status redis,确认服务处于active (running)状态。