前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis案例 - 事件提醒

Redis案例 - 事件提醒

作者头像
dys
发布2018-04-03 16:50:26
1.2K0
发布2018-04-03 16:50:26
举报
文章被收录于专栏:性能与架构

场景

任务是 当 redis set 中有新元素时及时处理 需要在set有新元素后自动得到通知,省得使用轮询的方式来查看是否有新元素 相当于对set做一个事件提醒

实现

如果能使用阻塞版命令就非常简单了,例如list的pop操作有阻塞版的brpop

阻塞版的意思就是:当key中为空时就等着,有新元素后就马上获取

非阻塞版命令则不等,直接返回了

获取set元素的命令spop是没有阻塞版本的,但可以把他俩一起使用,使用brpop来完成这个任务 新元素的事件处理,相当于消费者 示例代码

LOOP forever WHILE SPOP(key) returns elements ... 逻辑处理 ... END BRPOP helper_key END 向set中添加新元素时就触发了事件,相当于生产者 示例代码 MULTI SADD key element LPUSH helper_key x EXEC 生产者向set中添加元素,同时向list中也添加了元素,并把这两个动作放到一个事务中,保证原子性

消费者阻塞等待list,阻塞解除后,从set中获取元素进行逻辑处理,当生产者向list中添加新元素时,阻塞就解除了,也就说明set中有了新元素

这个list只是一个帮助角色,用来实现阻塞通知功能,不是业务角色

通过对list阻塞方式的结合,巧妙的实现了阻塞版的set 使用阻塞版list操作,可以实现更丰富的阻塞原语 此示例来自redis官网,很有趣的用法

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-03-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JAVA高性能架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档