目录
业务场景:
电影网站公司开年度总结会,商讨关于服务器续租的问题,因为,每年都有新的电影,肯定要把新的电影放进资源中。有员工就提议可以续租服务器并且提高存储的容量,有员工就说可以自己搭一个服务器,有员工就说可以将那些常年没人看的电影或者观看频度非常低的电影进行一个下架,这样就可以节约存储空间也不需要去扩充服务器的容量
业务分析:
①如何去统计每部电影的每天观看次数、每周观看次数、每月观看次数,每年观看次数
②获取年度最低浏览量、月度最低浏览量、周最低浏览量
解决方案:使用Bitmaps数据类型
Bitmaps数据类型存储的是数据的状态,可以看成String数据类型的位操作
对于像党员这样的字段:可以填写0或1来表示是或者不是,当然保存0或1数据只需要1bit即可
Bitmaps数据类型
Bitmaps的基础操作:
·设置指定key对应偏移量上的bit值,value只能是0或1
setbit key offset value
·获取指定key对应偏移量上bit的值
getbit key offset
Bitmaps的扩展操作:
·对指定的key按位进行交、并、非、异或操作,并将结果保存到destkey中
bitop op destkey key1 [key2 key3 ...]
·统计key中1的数量
bitcount key [start,end]
业务场景:
电影网站->①统计每天某一部电影是否被点播②统计每天有多少部电影被点播③统计每周/月/年有多少电影被点播④统计年度那部电影没有被点播
业务分析:
1.可以根据电影的名称将电影的id查出来,将电影的id设置为偏移量,将时间设置为key,观看了bit为设置为1否则0
//非诚勿扰 id 2 2021-11-25被点播
setbit 2021-11-25 2 1
getbit 2021-11-25 2 //获取2021-11-25 非诚勿扰是否被点播
2.统计每天有多少电影被点播
bitcount 2021-11-25
3.统计每周/月/年有多少电影被点播
可以将一周的数据进行一个or操作,每月/每年可以以此类推
setbit 2021-11-25 1 1
setbit 2021-11-25 3 1
setbit 2021-11-25 5 1
setbit 2021-11-26 2 1
setbit 2021-11-26 5 1
setbit 2021-11-26 6 1
bitop op 25-26 2021-11-25 2021-11-26
bitcount 25-26
4.统计年度那部电影没有被点播
先统计出年度有哪些电影被点播了,然后用电影总数减去被点播过的电影总数
应用于信息状态的统计
Hyperloglog数据类型
统计独立UV
·原始方案:set
·存储每个用户的id(字符串)
·改进方案:Bitmaps
·存储每个用户状态(bit)
·全新的方案:Hyperloglog
基数:
·基数是数据集去重后元素个数
·Hyperloglog是用来做基数统计的,运用了LogLog算法
{1,3,5,7,5,7,8} 基数集:{1,3,5,7,8} 基数:5
Hyperloglog类型的基本操作:
·添加数据
pfadd key element [element ...]
·统计数据
pfcount key [key ...]
·合并数据
pfmerge destkey sourcekey [sourcekey ...]
相关说明:
·用于进行基数统计,不是集合,不保存数据,只记录数量而不是具体数据
·核心是基数估算法,最终数值存在一定误差
·误差范围:基数估计的结果是一个带有0.81%标准误差的近似值
·耗空间极小,每个hyperloglog占用了12k的内存用于表级基数
·pfadd命令不是一次性分配12k内存使用,会随着基数的增加内存主键增大
·pfmerge命令合并后占用内存的存储空间为12k,无论合并之前数据量多少
应用于独立信息的统计
GEO数据类型
应用场景:
①显示周围的用户
②显示两点之间的距离
GEO类型的基本操作:
·添加坐标点
geoadd key longitude latitude member [longitude latitude member ...]
//longitude:横坐标 latitude:纵坐标 member:名称
·获取坐标点
geopos key member
·计算坐标点的距离
geodist key member1 member2 [unit]
· 以坐标为核心获取范围内的成员
georadius key longitude latitude radius m|km|ft|mi [withcoord] [withdist] [withhash] [count count]
· 以固定点为核心获取范围内的成员
georadiusbymember key member radius m|km|ft|mi [withcoord] [withdist] [withhash] [count count]
·计算经纬度
geohash key member [member ...]
应用于地理位置的计算