资讯专栏INFORMATION COLUMN

laravel使用redis监听在内部再次使用redis遇到的问题

Harriet666 / 1677人阅读

摘要:问题一启用监听收不到过期时间消息,原因是未开启配置解决办法是在配置文件内开启或者在命令行使用命令问题二原因是默认链接时间未秒,在设置为即可。问题三这个是因为一个链接使用监听时,无法使用其他命令。将监听事件设置为多带带实例。

问题一:启用监听收不到过期时间消息,原因是未开启配置
解决办法是 在redis配置文件内开启 notify-keyspace-events Ex或者在redis命令行 redis-cli 使用命令:

config set notify-keyspace-events Ex

问题二:PredisConnectionConnectionException : Error while reading line from the server

原因是Redis默认链接时间未60秒,在database.php设置read_write_timeout为0即可。

"read_write_timeout"=>0

问题三:ERR only (P)SUBSCRIBE / (P)UNSUBSCRIBE / QUIT allowed in this context
这个是因为一个Redis链接使用监听时,无法使用其他命令。需要重新建立一个链接。期初我使用 new PredisClient(),一直报错,我也不知道为啥。然后我想到了使用集群,使用相同配置。将监听事件设置为多带带实例。具体操作如下:

//datebase.php配置页面
"redis" => [
        "client" => "predis",
        "default" => [
            "host" => env("REDIS_HOST", "127.0.0.1"),
            "password" => env("REDIS_PASSWORD", null),
            "port" => env("REDIS_PORT", 6379),
            "database" => 0,
            "queue" => "{default}",//queue站点默认走的redis
        ],
        "publisher" => [ //redis 订阅监听
                    "host" => env("REDIS_HOST", "127.0.0.1"),
                    "password" => env("REDIS_PASSWORD", null),
                    "port" => env("REDIS_PORT", 6379),
                    "database" => 0,
                    "read_write_timeout"=>0,//长连接不要断
                ],
           ]
//监听页面
//__keyevent@*__:expired监听过期消息
$redis=Redis::connection("publisher");//创建新的实例
$redis->psubscribe(["__keyevent@*__:expired"], function ($message, $channel) {
   echo $message;
   Redis::set("aa","123");//这样就不会报错了。这里使用的是default的,是两个redis链接。
});

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/29942.html

相关文章

  • 分析Laravel队列实现原理解决问题记录

    摘要:在使用中的队列时,产生冲突干扰。文件中的配置部分至此,两个项目的队列冲突原因就找到了。队列监听最后遇到问题,莫要病急乱投医。从代码入手,分析理解实现原理,找对点,解决方法也许很简单,。 问题 公司项目使用Laravel的开发的两个项目在同一个测试服务器部署,公用同一个redis。在使用laravel中的队列时,产生冲突干扰。 查找问题原因 在laravel 队列的操作类 Illumin...

    Corwien 评论0 收藏0
  • PHPer、Laravel 面试可能会遇到问题及答案

    摘要:如何实现持久化持久化,将在内存中的的状态保存到硬盘中,相当于备份数据库状态。相当于备份数据库接收到的命令,所有被写入的命令都是以的协议格式来保存的。 最近社区里面有一篇文章引起了最多程序猿的关注,Laravel、PHPer 面试可能会遇到的问题,看评论区不少小伙伴们被难倒,对于一些问题同样难倒了我(其实有很多啦),趁着周末有空,又总结梳理了一遍,顺便来答一波题。由于个人技术水平有限,答...

    fanux 评论0 收藏0
  • laravel利用Redis来实现网站缓存读取

    摘要:丰富的数据类型支持二进制案例的及数据类型操作。原子的所有操作都是原子性的,同时还支持对几个操作全并后的原子性执行。丰富的特性还支持通知过期等等特性。完成上述配置之后我们就可以在应用代码中使用进行数据存取了。 教科书式开头————先看一下redis的简介 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。 Redis 与其他 key - value ...

    yankeys 评论0 收藏0

发表评论

0条评论

Harriet666

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<