Python消息中间件 redis
消息中间件的应用场景
- 异步通信
- 应用解耦
- 缓解流量高峰压力
日志处理平台
<—————————————————————————————>|——微信告警
日志采集—消息队列 —|—-异常分析—消息队列 |—web告警
<———————————-> —|—-日志存储 <—————-> |—邮件告警
消息中间件需要满足
- 高性能(单机性能)
- 高可用 (单节点故障服务无影响)
- 横向扩展 (可增加服务器数量)
消息中间件中的各种概念和角色
producer ——- queue/channel/topic ———- consumer
broker
redis使用场景
String
- 缓存二进制数据,比如图片,序列化对象
- 技术器 ,比如文章访问量统计
- 位运算,节约内存
List
- 获取最新的N条数据
- 消息队列
- 实时的分析系统,比如服务器监控程序
Hash
- 存储具有多个属性的对象,比如用户的年龄,性别,积分等
Set
- 集合操作,比如通过交集,实现共同的关注,共同的好友。
- 存储无序不重复数据,比如存储文章标签。
Sorted Set
有序集合
- TopN排行榜,比如排行榜
- 范围查找,比如判断ip地址所在地
- 优先级队列
- 过期项目处理
Pub Sub
发布订阅
实时的消息系统,比如即时聊天(私有通道),群聊。
基于redis list
python 客户端*生产者
import redis
import names
import time
r = redis.StrictRedis(host='192.168.56.101',port=6379,db=0)
while True:
time.sleep(2)
name=names.get_full_name()
x = r.lpush('names',name) # 向列表头(左侧)添加元素,返回列表长度
print(x,name)
python服务端*消费者
import redis
r = redis.StrictRedis(host='localhost',port=6379,db=0)
def consume(key):
while True:
value = r.brpop(key)
# 返回并删除键为key,names的列表中的尾元素
# 如果list为空,则会一直阻塞等待
yield value
for v in consume('names'):
print(v)
更多详细的python-redis操作
https://cloud.tencent.com/developer/article/1151834
基于发布订阅
# 生产者,发布,将上述lpush --> publish
import redis
import names
import time
r = redis.StrictRedis(host='192.168.56.101',port=6379,db=0)
while True:
time.sleep(2)
name=names.get_full_name()
x = r.publish('names',name) # x为订阅者的数量
print(x,name)
# 消费者,订阅者
import redis
r = redis.StrictRedis(host='0.0.0.0',port=6379,db=0)
ps = r.pubsub()
ps.subscribe('names')
for item in ps.listen():
print (item)
还没有评论,来说两句吧...