首页 > 作文

redis键空间通知(keyspace notification)

更新时间:2023-04-07 11:47:47 阅读: 评论:0

一.需求

  在redis中,设置好key和生存时间之后,希望key过期被删除时能够及时的发送一个通知告诉我key,以便我做后续的一些操作.

二.环境

  系统:windows10

  php:7.1

  redis:3.2

三.redis

  键空间通知:

  键空间通知:

  redis2.8.0版本之后推出了键空间通知,如何使用呢?当redis的key被删除时,redis会发送两种不同类型的事件,特定的事件会往特定的频道发送通知,我们只要订阅这个特定的频道等待通知即可.

  两种事件通知:

publish __keyspace@0__:mykey delpublish __keyevent@0__:del mykey

  以keyspace为前缀的频道被称为键空间通知(key-space notification),订阅这个频道__keyspace@0__:mykey,可以接收0号数据库中所有修改键mykey的事件,订阅者将接收到被执行的事件的名字,就是del;

  而以keyevent为前缀的频道则称为键事件通知(key-event notification),订阅这个频道__keyevent@0__:del,则可以接收0号数据库中所有执行del命令的键,订阅者将接收到被执行事件的键的名字,就是mykey

  我需要获取key 的名字,所以需要订阅__keyevent@0__:频道.

四.实现步骤

 (1) 打开redis配置文件redis.c动漫人物画图片大全onf,找到notify-keyspace-events 将其设为ex,e代表键事件通知,x代表过期事件,每当有过期键被删除时发送,然后重启redis使配置生效;

 (2) 创建demo.php文件:

 1 <?php  2  3 class redisinstance 4 { 5     private $redis; 6  7     public function __construct($host = '127.0.0.1', $port = 6379) 8     { 9         $this->redis = new redis();10         $this->redis->connect($host, $port);11     }12 13     public function expire($key = null, $time = 0)14     {15         return $this->redis->expire($key, $time);16     }17 18     public function像妈妈爱爸爸那样爱你 psubscribe($patterns = array(), $callback)19     {20         $this->redis->psubscribe($patterns, $callback);21     }22 23     public function toption()24     {25         $this->redis->toption(\redis环卫工人作文400字::opt_read_timeout,-1);26     }27 28 }29 30  echo "程序开始执行..\n";31 $redis = new redisinstance();32 $redis->toption();33 $redis->psubscribe(array('__keyevent@0__:expired'), 'callback');34 //回调35 function callback($redis, $pattern, $chan, $msg)36 {37     echo "$pattern\n";38   四六级报考条件  echo "$chan\n";39     echo "$msg\n";40       /*业务逻辑*/41 }

 (3) 使用php运行demo.php文件,首先你的php是否设置环境变量,设置方法:找到我的电脑右键选择属性—高级系统设置—环境变量—找到path变量编辑/没有path变量的可以新建一个—将你的php.exe的绝对路径放进去保存即可,之后就可以直接使用php命令了,其次必须开启了redis拓展,查看是否装有redis拓展:

php -m

确认已安装拓展,直接运行文件:

php demo.php

(4) 打开一个redis客户端,即运行redis-cli.exe文件或者使用命令 redis-cli.exe -p 6379,创建一个key,并将过期时间设置在五秒,然后观察运行demo.php的窗口:

五秒之后key过期被删除,php接收通知走进回调方法,这里就可以处理业务逻辑了.

五.测试通知时效性:

  写一个脚本循环华丽的往redis中插入50条记录,且每条记录的过期时间在五秒和十秒随机产生,观察接收到的通知状态:

 

  注意:redis 使用以下两种方式删除过期的键:

当一个键被访问时,程序会对这个键进行检查,如果键已经过期,那么该键将被删除。底层系统会在后台渐进地查找并删除那些过期的键,从而处理那些已经过期但是不会被访问到的键。

  也就是说如果一个键过期了但是没有程序访问它,并且底层系统还没有排查到它的时候这个键是不会被删除的,也不会有通知产生,因此,redis 产生expired通知的时间为过期键被删除的时候, 而不是键的生存时间变为0的时候。

本文发布于:2023-04-07 11:47:45,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/ee34006f06e0bfb9248fec0f7753a1bb.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:redis键空间通知(keyspace notification).doc

本文 PDF 下载地址:redis键空间通知(keyspace notification).pdf

标签:通知   事件   频道   两种
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图