laravel RedisException: Connection refused优雅草PMS项目管理系统报错解决-以及Redis 详细指南-优雅草卓伊凡

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

深入排查

如果以上方法都不奏效,可以:

  1. PhpRedisConnector.php 文件中的连接代码前添加日志,打印连接参数
  2. 检查 Redis 服务器日志 /var/log/redis/redis-server.log
  3. 使用 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 生产环境最佳实践

  1. 内存管理
    • 设置合理的maxmemory
    • 根据业务选择合适的淘汰策略
    • 监控内存使用情况
  1. 持久化选择
    • RDB适合备份和快速恢复
    • AOF提供更好的持久性保证
    • 生产环境建议RDB+AOF结合使用
  1. 高可用
    • 主从复制
    • Redis Sentinel实现自动故障转移
    • Redis Cluster实现数据分片
  1. 性能优化
    • 合理使用Pipeline减少网络往返
    • 避免大Key(单个Key过大)
    • 避免热点Key(某个Key访问过于频繁)
    • 合理设置连接池大小
  1. 安全
    • 设置密码认证
    • 禁用危险命令
    • 绑定特定IP
    • 启用保护模式

Redis因其高性能、丰富的数据结构和多种持久化选项,已成为现代应用架构中不可或缺的组件,合理配置和使用Redis可以极大提升系统性能和用户体验。

相关推荐
杨进军1 分钟前
微前端之子应用的启动与改造
前端·架构
多啦C梦a11 分钟前
React 表单界的宫斗大戏:受控组件 VS 非受控组件,谁才是正宫娘娘?
前端·javascript·react.js
迷曳24 分钟前
21、鸿蒙Harmony Next开发:组件导航(Navigation)
前端·harmonyos·鸿蒙·navigation
打野二师兄1 小时前
我做的基础服务项目,是如何实现 API 安全与限流的(短信、邮件、文件上传、钉钉通知)
redis
练习前端两年半1 小时前
🚀 深入Vue3核心:render函数源码解析与实战指南
前端·vue.js
leobertlan1 小时前
杂篇-有感而发,写于2025年7月
java·前端·程序员
gaze2 小时前
vueuse的createReusableTemplate函数实现原理
前端·vue.js
小码哥_常2 小时前
Android开发自救指南:当大图遇上OOM,这波操作能保命!
android·前端
jsonchao2 小时前
阿里毕业 2 个多月后,我闲着无聊做了 1 个小游戏平台
前端
支撑前端荣耀2 小时前
十四、Cypress持续集成实践——让测试融入开发流水线
前端