使用 Redis 来实现定时任务
2017-05-16 00:17
696 查看
在 Redis 的 2.8.0 版本之后,其推出了一个新的特性——键空间消息(Redis Keyspace Notifications),它配合 2.0.0 版本之后的 SUBSCRIBE 就能完成这个定时任务的操作了,不过定时的单位是秒。
比如我们可以往 foo 频道推一个消息 bar,那么就可以直接:
Redis 默认是关闭这个功能的,你需要修改配置文件来打开它,或者直接在 CLI 里面通过指令修改
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
相关文章推荐
- Node.js 中使用 Redis 来实现定时任务
- spring boot-使用redis的Keyspace Notifications实现定时任务队列
- linux使用crontab实现PHP执行计划定时任务
- 使用oracle定时任务和存储过程实现数据拷贝
- node.js中使用node-schedule实现定时任务实例
- 使用jse的TimerTask实现在一天中的某个区间段定时任务
- SQL Server 2005使用作业实现定时备份任务和删除指定天数前的备份文件
- SQL Server 2005使用作业实现定时备份任务和删除指定天数前的备份文件
- linux使用crontab实现PHP执行定时任务
- java中使用ScheduledThreadPoolExecutor实现定时任务
- linux使用crontab实现PHP执行计划定时任务
- 使用Quartz.Net框架实现定时任务
- spring使用Quartz实现定时任务
- 使用 Spring 实现定时器任务,定时统计汇总
- 在Grails中使用Quartz插件实现定时任务
- 使用ASP.NET实现Windows Service定时执行任务
- 使用服务程序实现PHP定时执行任务功能
- 使用spring quartz实现定时任务
- 使用任务计划功能结合shutdown命令让Win7实现定时自动执行
- Spring中使用quartz插件实现定时任务