錯誤表現: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
,并重啟從節點;