redis php监听过期key,redis监听key过期

这个功能在之前的项目中就用到过,其实这个功能在实际项目中能用到的场景还是比较多的,用到的频率也是比较高,

因为之前专注写业务代码,服务器搭建优化,调试,线上部署等这些操作很少有实际的经验,最近想着在自己的本地来玩玩这些东西

于是开干,自己本地电脑windows环境安装好laravel和redis

首先在自己本地的redis窗口调试看能不能收到对应的监听:

这里遇到一个坑,本地的redis配置自己没有看清楚

我一直在 redis.windows-service.conf里面配置 notify-keyspace-events "Ex" 调试了好多次监听窗口都没有任何反应

于是回头全部重新把文件结果看了一下原来还有一个 redis.windows.conf,然后在这里面配置好之后,再调试

成功了

648d9cefa721

image

调试的步骤如下:

开启两个窗口

A窗口输入监听命令:PSUBSCRIBE keyevent@0:expired

B窗口创建测试的数据并设置过期时间

648d9cefa721

image

最终laravel也调试成功了

648d9cefa721

image

具体详细的介绍一下laravel这边配置和代码

1.创建监听的脚本

命令:

php artisan make:command 文件名

如何会在laravel目录结构下创建一个文件

我本地的目录结构 app\Console\Commands\文件名.php

如何把脚本编写成这样 贴一下我的代码:

namespace App\Console\Commands;

use Illuminate\Console\Command;

use Illuminate\Support\Facades\Redis;

class OrderExpireListen extends Command

{

/**

* The name and signature of the console command.

*

* @var string

*/

protected $signature = 'order:expire';

/**

* The console command description.

*

* @var string

*/

protected $description = '监听创建的订单,在30分钟后如果没有付款取消订单';

/**

* Create a new command instance.

*

* @return void

*/

public function __construct()

{

parent::__construct();

}

/**

* Execute the console command.

*

* @return mixed

*/

public function handle()

{

$cachedb = config('database.redis.cache.database',0);

$pattern = '__keyevent@'.$cachedb.'__:expired';

Redis::subscribe([$pattern],function ($channel){ // 订阅键过期事件

echo $channel.PHP_EOL;//订阅的频道

//echo $message.PHP_EOL;//过期的key

echo '---'.PHP_EOL;

});

}

}

2.在某个控制器丽创建redis数据测试即可 不贴代码 截图表示一下

648d9cefa721

image

3.最终的结果 redis窗口和laravel脚本窗口都同步监听到了过期的key, 成功拿到可以之后,你们就可以想怎么玩就怎么玩了

648d9cefa721

image

几个重点总结:

1.Redis 的 2.8.0 版本之后可用才可以使用这个功能

具体原理是 键空间消息(Redis Keyspace Notifications),配合 2.0.0 版本之后的 SUBSCRIBE 就能完成这个定时任务的操作了,定时的单位是秒。

2.这个功能我们可以封装起来,能使用到场景也是很多的,

3.在以后的实际业务场景中遇到相关发坑,我再记录分享,用一个功能,怎么用好关键是知道他的坑在哪里,避开坑,你就能随意摩擦了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值