Redis高级数据类型

Bitmaps:Redis应用于信息状态统计

如果仅仅存储一个状态(Y/N,1/0),可以用二进制位存,用编号/id(范围/max较小最好)作为位置

设置值setbit bits 位置 值

获取值getbit bits 位置

 

扩展操作

对指定key按位进行交、并、非、异或操作,并将结果保存到destKey中

bitop op destKey key1 [key2...]

and:交  or:并  not:非  xor:异或

统计指定key中1的数量

bitcount key [start end]

业务场景 

电影网站:统计每天某一部电影是否被点播;统计每天有多少部电影被点播;统计每周/月/年有多少部电影被点播;统计年度哪部电影没有被点播

 

HyperLogLog:统计不重复数据的数量  Redis应用于独立信息统计

基数统计,基数集合(去重后的集合)

基数是数据集去重后元素个数,HyperLogLog是用来做基数统计的,运用了LogLog的算法

HyperLogLog基本操作

添加数据  pfadd  key  element  [element...]

统计数据  pfcount  key  [key...]

合并数据  pfmerge destkey  sourcekey  [sourcekey...]

 

说明:用于进行基数统计,不是集合,不保存数据,只记录数量而不是具体数据

核心是基数估算算法,最终数值存在一定误差

误差范围:基数估计的结果是一个带有0.81%标准错误的近似值

耗空间极小,每个hyperloglog key占用了12K的内存用于标记基数

pfadd命令不是一次性分配12K内存使用,会随着基数的增加内存逐渐增大

pfmerge命令合并后占用的存储空间为12K,无论合并之前数据量多少

 

 

GEO  Redis用于记录地理位置信息

微信/陌陌  附近的人

美团/饿了吗

携程/马蜂窝

高德/百度      只要和线下有关,位置类的东西

 

基本操作:key是GEO对象名

添加坐标点  geoadd  key  longitude  latitude  member  [longitude  latitude  member...]

获取坐标点  geopos  key  member  [member ...]

计算坐标点距离  geodist  key  member1 member2 [unit]  -->只算水平位置  默认单位是m-->unit

根据坐标求范围内的数据  georadius  key  longitude  latitude  radius  

根据点求范围内数据  georadiusbymember  key  member  radius

获取指定点对应的坐标hash值  geohash  key  member

 

posted @ 2020-04-11 22:56  LinBupt  阅读(322)  评论(0编辑  收藏  举报