laravel RedisException: Connection refused
優雅草PMS項目管理系統報錯解決-以及Redis 詳細指南-優雅草卓伊凡
今天來開始更新pms系統,因為我們ppt上面要做,才發現原來打不開,此前主要是事情太多,我們一直有很多東西擱置
解決 Laravel Redis 連接被拒絕的問題
您遇到的錯誤是 RedisException: Connection refused
,這表明 Laravel 應用程序無法連接到 Redis 服務器。以下是解決此問題的步驟:
常見原因和解決方案
1. 檢查 Redis 服務是否運行
首先確認 Redis 服務器是否正在運行:
sudo systemctl status redis
如果未運行,啟動它:
sudo systemctl start redis
面板打開看了redis 正常 運行
然后發現端口改為6999了, 那估計配置文件不對頭。
2. 檢查 Redis 配置
確保您的 Laravel 配置文件 .env
中有正確的 Redis 配置:
REDIS_HOST=127.0.0.1
REDIS_PORT=6379
REDIS_PASSWORD=null
果然 redis不對
修改后正常運行 laravel 不過 打開又有新的問題,不過不在本篇講了
新問題 🧨 NOAUTH Authentication required.
下篇講,本文主要講述redis
3. 檢查 Redis 服務器配置
查看 Redis 配置文件 /etc/redis/redis.conf
中的以下設置:
bind 127.0.0.1
protected-mode yes
如果 Redis 在另一臺服務器上,確保 bind
設置允許來自應用服務器的連接。
4. 檢查防火墻設置
確保防火墻允許 Redis 端口(默認 6379):
sudo ufw allow 6379
5. 檢查 PHP Redis 擴展
確保已安裝 PHP Redis 擴展:
php -m | grep redis
如果沒有,安裝它:
sudo apt-get install php-redis # Ubuntu/Debian
sudo systemctl restart php-fpm # 或您使用的 PHP 服務
6. 測試 Redis 連接
嘗試手動連接 Redis:
redis-cli ping
應該返回 PONG
。
7. 檢查 Laravel Redis 配置
查看 config/database.php
中的 Redis 配置:
'redis' => ['client' => env('REDIS_CLIENT', 'phpredis'),'default' => ['host' => env('REDIS_HOST', '127.0.0.1'),'password' => env('REDIS_PASSWORD', null),'port' => env('REDIS_PORT', 6379),'database' => env('REDIS_DB', 0),],
],
8. 檢查持久連接設置
如果使用持久連接,確保配置正確:
'options' => ['persistent' => true,'persistent_id' => 'your_id_here',
],
臨時解決方案
如果您需要快速恢復服務,可以暫時禁用 Redis 緩存,在 .env
中設置:
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_CONNECTION=sync
深入排查
如果以上方法都不奏效,可以:
- 在
PhpRedisConnector.php
文件中的連接代碼前添加日志,打印連接參數 - 檢查 Redis 服務器日志
/var/log/redis/redis-server.log
- 使用
telnet
測試端口連通性:telnet your_redis_host 6379
Redis 詳細配置與應用場景指南
Redis 詳細運行配置
Redis 的配置文件通常位于 /etc/redis/redis.conf
,以下是主要配置參數及其說明:
1. 基本配置
- daemonize
yes|no
:是否以守護進程方式運行 - pidfile
/var/run/redis.pid
:PID 文件位置 - port
6379
:監聽端口 - bind
127.0.0.1
:綁定的IP地址 - timeout
300
:客戶端空閑超時時間(秒) - tcp-keepalive
300
:TCP保持連接時間(秒)
2. 安全配置
- requirepass
foobared
:設置認證密碼 - rename-command
CONFIG ""
:重命名或禁用危險命令 - protected-mode
yes
:保護模式(無bind和密碼時只接受本地連接)
3. 資源限制
- maxclients
10000
:最大客戶端連接數 - maxmemory
2gb
:最大內存限制 - maxmemory-policy
volatile-lru
:內存滿時的淘汰策略
volatile-lru
:從已設置過期時間的數據集中挑選最近最少使用的數據淘汰allkeys-lru
:從所有數據集中挑選最近最少使用的數據淘汰volatile-random
:從已設置過期時間的數據集中隨機淘汰allkeys-random
:從所有數據集中隨機淘汰volatile-ttl
:從已設置過期時間的數據集中挑選將要過期的數據淘汰noeviction
:不淘汰,返回錯誤
4. 持久化配置
- save
900 1
:900秒內有1個更改則快照 - save
300 10
:300秒內有10個更改則快照 - save
60 10000
:60秒內有10000個更改則快照 - stop-writes-on-bgsave-error
yes
:快照出錯時停止寫入 - rdbcompression
yes
:RDB文件壓縮 - dbfilename
dump.rdb
:RDB文件名 - dir
./
:持久化文件存儲目錄
AOF持久化配置:
- appendonly
no
:是否開啟AOF - appendfilename
appendonly.aof
:AOF文件名 - appendfsync
everysec
:同步策略
always
:每次寫入都同步everysec
:每秒同步一次no
:不主動同步,由操作系統決定
5. 高級配置
- hash-max-ziplist-entries
512
:哈希使用ziplist的最大元素數 - hash-max-ziplist-value
64
:哈希使用ziplist的最大值字節數 - activerehashing
yes
:是否主動rehash - client-output-buffer-limit:客戶端輸出緩沖區限制
- hz
10
:后臺任務執行頻率(1-500)
Redis 主要應用場景
1. 緩存系統
- 減輕數據庫壓力
- 熱點數據緩存
- 頁面緩存
- 對象緩存
2. 會話存儲(Session Store)
- 分布式會話共享
- 高可用會話管理
3. 消息隊列系統
- 使用List實現簡單隊列
- Pub/Sub實現發布訂閱
- Stream實現更復雜的消息隊列
4. 實時排行榜/計數器
- 使用ZSET實現排行榜
- INCR實現計數器
- 實時統計在線人數等
5. 分布式鎖
- SETNX實現分布式鎖
- RedLock算法實現更安全的分布式鎖
6. 社交網絡功能
- 粉絲關系
- 時間線
- 點贊/收藏
7. 地理位置應用
- GEO命令處理地理位置
- 附近的人
- 位置搜索
8. 實時系統
- 實時監控
- 實時分析
- 實時推送
Redis 數據結構及應用對應
數據結構 | 常用命令 | 典型應用場景 |
String | SET, GET, INCR | 緩存、計數器、分布式鎖 |
Hash | HSET, HGET, HINCRBY | 對象存儲、用戶屬性 |
List | LPUSH, RPOP, BLPOP | 消息隊列、最新列表 |
Set | SADD, SINTER, SUNION | 標簽、好友關系、唯一計數 |
ZSet | ZADD, ZRANGE, ZREVRANK | 排行榜、優先級隊列 |
HyperLogLog | PFADD, PFCOUNT | 基數統計(UV統計) |
GEO | GEOADD, GEORADIUS | 地理位置、附近的人 |
Stream | XADD, XREAD, XGROUP | 消息隊列、事件溯源 |
Redis 生產環境最佳實踐
- 內存管理:
- 設置合理的maxmemory
- 根據業務選擇合適的淘汰策略
- 監控內存使用情況
- 持久化選擇:
- RDB適合備份和快速恢復
- AOF提供更好的持久性保證
- 生產環境建議RDB+AOF結合使用
- 高可用:
- 主從復制
- Redis Sentinel實現自動故障轉移
- Redis Cluster實現數據分片
- 性能優化:
- 合理使用Pipeline減少網絡往返
- 避免大Key(單個Key過大)
- 避免熱點Key(某個Key訪問過于頻繁)
- 合理設置連接池大小
- 安全:
- 設置密碼認證
- 禁用危險命令
- 綁定特定IP
- 啟用保護模式
Redis因其高性能、豐富的數據結構和多種持久化選項,已成為現代應用架構中不可或缺的組件,合理配置和使用Redis可以極大提升系統性能和用戶體驗。