Redis高级数据类型
Posted LinBupt
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
以上是关于Redis高级数据类型的主要内容,如果未能解决你的问题,请参考以下文章