Redis高级数据类型
Bitmaps
bitmaps是二进制的方式存储信息。
应用场景
应用于信息状态统计。
例如:五个人相约看电影,统计每个人是否观看电影。
那么存储数据就是10010,“1”表示观看,“0”表示未观看;一个位置代表一个人;那么甲、丁观看了电影;乙、丙、卯未观看电影。
操作
- setbit :设置指定key对应偏移量上的bit值,value只能是1或0
- getbit :获取指定key对应偏移量上的bit值
- bitop : 对指定key按位进行交、并、非、异或操作,并将结果保存到destKey中
- and:交
- or:并
- not:非
- xor:异或
- bitcount:统计指定key中1的数量
例如:有八部电影,2021年05月16日有3部电影被观看了;2021年05月17日有3部电影被观看了;但是第一天有同1部都被观看。
20210516 10001001
20210517 10010010
求这两天一共有多少部电影被观看?
HyperLogLog
HyperLogLog是用来做基数统计的,运用了LogLog的算法。
基数是数据集去重后元素个数。
应用场景
用于独立信息统计
操作
- pfadd:添加数据
- pfcount:统计数据
- pfmerge:合并数据
相关
- 用于进行基数统计,不是集合,不保存数据,只记录数量而不是具体数据
- 核心是基数估算算法,最终数值存在一定误差
- 误差范围:基数估计的结果是一个带有 0.81% 标准错误的近似值 耗空间极小,每个hyperloglog key占用了12K的内存用于标记基数
- pfadd命令不是一次性分配12K内存使用,会随着基数的增加内存逐渐增大
- Pfmerge命令合并后占用的存储空间为12K,无论合并之前数据量多少
GEO
主要用于存储地理位置信息,并对存储的信息进行操作。
应用场景
用于地理位置计算
操作
- geoadd:添加地理位置的坐标。
- geopos:获取地理位置的坐标。
- geodist:计算两个位置之间的距离。
- georadius:根据用户给定的经纬度坐标来获取指定范围内的地理位置集合。
- georadiusbymember:根据储存在位置集合里面的某个地点获取指定范围内的地理位置集合。
- geohash:返回一个或多个位置对象的 geohash 值。