利用redis 的list数据结构,你可以将redis当做一个小的消息队列来使用
list 结构支持生产者向队列里压入消息,消费者从队列里拉取数据,生产者与消费者的数量没有限制,消息只能被消费一次。
下面实现一个生产者
import time
from redis.client import Redis
r = Redis(host='127.0.0.1', port=6379, db=0, password='password')
def producer():
for i in range(10):
r.lpush('int_queue', i)
time.sleep(1)
if __name__ == '__main__':
producer()
生产者每隔1秒钟就向队列里写入一条数据,下面来看消费者的代码
import time
from redis.client import Redis
r = Redis(host='127.0.0.1', port=6379, db=0, password='password')
def consumer():
while True:
data = r.rpop('int_queue')
if data is None:
time.sleep(0.5)
continue
print(data) # 消费数据
if __name__ == '__main__':
consumer()
消费者通常要使用while循环不停的尝试从队列里取数据,生产者是从左侧将数据写入队列的,那么消费者就应当从右侧拉取数据,最先被压入的数据理应被先消费。
如果队列是空的,rpop 方法会返回None,队列目前只是暂时为空,因此不能退出循环,sleep一段时间后再次尝试拉取数据。
成熟的消息队列有kakfa, rabbitmq, redis做消息队列其实有点摆不上台面,但胜在简单小巧,一些小的项目,也实在没必要配套一个kafka,毕竟搭建和维护都是需要时间的,而redis在应对少量消息时足够用了。
QQ交流群: 211426309