一个Redis消息队列实现
来源:互联网 发布:java 小游戏源代码 编辑:程序博客网 时间:2024/06/14 00:33
消息队列
某次在某乎上看到有人提到消息队列的问题,然后有人在回答里提到了Redis,接着便有人在评论里指出:Redis是缓存,不是消息队列。
但不幸的是,Redis的确提供一个简易的消息队列机制,可以用于一些要求不那么高的场合。
方法就是利用Redis的列表类型的push和pop操作。
我对前文所介绍的Redis Cache作了一点简单的扩展,增加了消息队列功能。
实现
代码基本就这么点:
class RedisMQ(RedisCache): def __init__(self, dbname, host='localhost', port=6379, db=0): super(RedisMQ, self).__init__(dbname, host, port, db) def push(self, channel, data): ch = self._getkey("channel", channel) self.db.lpush(ch, self.SERIALIZER.dumps(data)) def pop(self, channel, timeout=5): ch = self._getkey("channel", channel) msg = self.db.brpop(ch, timeout) return self.SERIALIZER.loads(msg[1]) if msg else Noneclass Channel(object): MQ = RedisMQ("msgqueue") def __init__(self, channel): self.channel = channel def push(self, **kwargs): Channel.MQ.push(self.channel, kwargs) def pop(self): return Channel.MQ.pop(self.channel)
用法
消息生产者
ch = Channel("test")ch.push(a=123,b="hello")
消息消费者,可能是另一个线程,甚至是另一个进程,甚至是另外一台主机——只要它们共用同一个redis即可。
ch = Channel("test")while msg=ch.pop(): # msg: {"a": 123, "b": "hello"}# ch is empty
阅读全文
1 0
- 一个Redis消息队列实现
- Redis实现消息队列
- redis实现消息队列
- redis实现消息队列
- redis实现消息队列
- Redis实现消息队列
- redis实现消息队列
- Redis实现消息队列
- Redis实现消息队列技巧
- 利用Redis 实现消息队列
- Redis实现简单消息队列
- Redis实现简单消息队列
- 用redis实现消息队列
- 利用Redis 实现消息队列
- redis消息队列的实现
- Redis实现简单消息队列
- 利用Redis 实现消息队列
- 利用Redis 实现消息队列
- python编程技巧之从字典中提取子集
- 如何完全屏蔽Chrome的提示:"请停用以开发者模式运行的扩展程序"
- C++ Vector用法介绍
- JavaSE_笔试题_单选选择题1
- 数据结构 队列以及Java代码实现
- 一个Redis消息队列实现
- 泛型算法
- Redis--事务
- WeakHashMap源码分析
- Linux操作系统故障排除-centos7口令丢失
- ubuntu16.04 安装composer和 laravel
- 前端JS知识要点总结(1)
- 数据结构 栈以及Java代码实现
- 缓存穿透和缓存失效的预防和解决