您的位置:首页 > 数据库 > Redis

使用 Redis 来实现定时任务

2017-05-16 00:17 696 查看
在 Redis 的 2.8.0 版本之后,其推出了一个新的特性——键空间消息(Redis Keyspace Notifications),它配合 2.0.0 版本之后的 SUBSCRIBE 就能完成这个定时任务的操作了,不过定时的单位是

Publish / Subscribe

Redis 在 2.0.0 之后推出了 Pub / Sub 的指令,大致就是说一边给 Redis 的特定频道发送消息,另一边从 Redis 的特定频道取值——形成了一个简易的消息队列

比如我们可以往 foo 频道推一个消息 bar,那么就可以直接:

//一个客户端订阅foo频道
SUBSCRIBE foo
//另一个客户端往foo频道发送bar消息
PUBLISH foo bar


Redis Keyspace Notifications

在 Redis 里面有一些事件,比如键到期、键被删除等。然后我们可以通过配置一些东西来让 Redis 一旦触发这些事件的时候就往特定的 Channel 推一条消息。

Redis 默认是关闭这个功能的,你需要修改配置文件来打开它,或者直接在 CLI 里面通过指令修改

K,表示 keyspace 事件,有这个字母表示会往 __keyspace@<db>__ 频道推消息。
E,表示 keyevent 事件,有这个字母表示会往 __keyevent@<db>__ 频道推消息。
g,表示一些通用指令事件支持,如 DEL、EXPIRE、RENAME 等等。
$,表示字符串(String)相关指令的事件支持。
l,表示列表(List)相关指令事件支持。
s,表示集合(Set)相关指令事件支持。
h,哈希(Hash)相关指令事件支持。
z,有序集(Sorted Set)相关指令事件支持。
x,过期事件,与 g 中的 EXPIRE 不同的是,g 的 EXPIRE 是指执行 EXPIRE key ttl 这条指令的时候顺便触发的事件,而这里是指那个 key 刚好过期的这个时间点触发的事件。
e,驱逐事件,一个 key 由于内存上限而被驱逐的时候会触发的事件。
A,g$lshzxe 的别名。也就是说 AKE 的意思就代表了所有的事件。


//将notify-keyspace-events设置为KEA
redis-cli config set notify-keyspace-events KEA


//订阅所有消息
redis-cli --csv psubscribe '__key*__:*'
//订阅命令分为大致两类
//对key为foo发生的变化
//PUBLISH __keyspace@0__:foo
//del事件发生时
//PUBLISH __keyevent@0__:del


//在另一个客户端执行redis指令,在上面就都能收到了,而且还能收到key的过期事件expired
redis-cli
set a 1
get a
expire a 1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: