Bitmap
Bitmap是一种基于String类型的特殊数据结构,使用位(bit)来表示信息,每个位可以是0或1。适合快速操作大量独立开关状态的场景,如状态监控、计数器等。
用法:
- SETBIT key offset value:对key指定的offset位置设置指定的值,value可以是0或1
- GETBIT key offset:获取key在指定offset位置的值
- BITCOUNT key [start end]:计算key中值为1的数量,可以计算范围里的位值
- BITOP operation destkey key [key ...] :对一个或多个键进行位操作(AND,OR,XOR,NOT)结果储存在destkey里
业务场景
状态监控
可以用来监控大量状态,如用户在线状态、设备状态等
具体案例:
在大型游戏平台里,需要实时监控成千上万的玩家是否在线。使用Bitmap可以高效记录每个玩家的在线状态
优点:
- 空间效率:使用位来存储状态,极大地节省了存储空间
- 快速读取和更新状态
批量操作:可以对多个状态位执行批量操作
功能开关
可以控制功能开关,如AB测试、特性发布等
具体案例:
在SaaS里,需要对新功能进行AB测试,只对部分用户开放,使用Bitmap可以快速控制哪些用户可以访问新功能
优点:
- 可以快速开启或关闭特定用户的访问权限
易于扩展
注意事项:
- Bitmap操作时原子性的,适用于并发场景
- Bitmap底层使用String类型实现,最大容量也是512MB
- 位操作可以快速执行,但是要注意内存和性能限制
- 设计Bitmap应用时,要考虑数据的稀疏性,避免不必要的内存浪费
概率数据结构,用于统计集合里唯一元素的数量,使用固定量的空间,通常为2KB,可以提供非常接近准确值的基数估计
用法:
- PFADD key element [element...] :向key对应的HyperLogLog中添加元素,如果key不存在,创建新的HyperLogLog
- PFCOUNT key:获取key对应的HyperLogLog中的基数,即唯一元素的数量
- PFMERGE destkey sourcekey [sourcekey ...]:将多个HyperLogLog集合合并到一个里,结果放到destkey 里