发布订阅
角色
发布者(publisher)、订阅者(subscriber)、频道(channel)
模型
发布者(publisher):发布消息到频道
订阅者(subscriber):订阅频道,每个订阅者可订阅多个频道,但订阅频道,不能收到未订阅之前的数据
api
发布
1 | publish channel message |
订阅
1 | subscribe [channel] #一个或者多个 |
取消订阅
1 | unsubscribe [channel] #一个或者多个 |
其他api
1 | psubscribe [pattern] #订阅模式,例如先list出所有以p开头的频道,pattern可写条件 |
消息队列
和发布订阅模型类似,redisde list队列可完成功能
模型
消息发布者–>发布消息到redis的list中,多个订阅者抢消息,只能有一个订阅这个可以抢到。
bitmap
位图,数据结构为2进制结构,对位进行操作存储数据。
api
1 | setbit key offset value |
应用
独立用户的统计
使用set结构存储和bitmap对比:
数据类型 | 每个uid占用的空间 | 需要存储的用户量 | 全部的内存量 |
---|---|---|---|
set | 32 位 | 5千万 | 200MB |
bitmap | 1 位 | 1亿 | 12.5MB |
如果只有10w的用户的set4MB,bitMap12.5MB
hyperloglog
数据结构
极小的空间完成独立用户的统计,本质还是字符串
api
1 | pfadd key element #添加元素 |
内存消耗
优点:内存小,百万独立用户数据15kb
缺点:错误率:0.81%,统计结果不是很准确,实验中插入100w数据,查询个数为1009838;只能存储个数不能获取到单条数据。
geo
数据结构
基于zset实现的,用于存储地理信息定位,存储经纬度,计算两地距离,范围计算等。
api
1 | geo key longitude latitude member |