Redis三种特殊数据类型
目录
- Geospatial(地理空间)
- Hyperloglog
- Bitmaps
Geospatial(地理空间)
Redis的Geo在Redis3.2版本就推出了,该功能可以推算地理位置的信息,两地之间的距离,方圆几里的人
geoadd:添加地理位置
geoadd china:city 116.40 39.90 beijinggeoadd china:city 121.47 31.23 shanghaigeoadd china:city 106.50 29.53 chongqing 114.05 22.52 shengzhengeoadd china:city 120.16 30.24 hangzhou 108.96 34.26 xian
geopos:从key里返回所有给定位置元素的位置(经度和纬度)
geodist:
返回两个给定位置之间的距离
可以指定单位参数
m :米
km:千米
mi:英里
ft:英尺
默认单位是米
georadius:以给定的经纬度为中心,找出某一半径内的元素
查询经纬度为(110,30)周围500公里的城市信息
输出带上经纬度
输出限制个数
显示到中心位置的距离
georadiusbymember:找出位于指定范围内的元素,中心点是由给定的位置元素决定
geohash:返回一个或多个位置元素的geohash表示
该命令返回11个字符的geohash字符串
将二维的经纬度转换为一维的字符串,如果两个字符串越接近,那么距离越近
由于geo底层的实现原理其实就是zset,我们可以使用zset命令来操作geo
查看所有元素
移除元素
Hyperloglog
Hyperloglog是一种用于估计大规模数据集基数(即集合中不同元素的数量)的概率性算法
网页的UV(一个人访问网站多次,但是还是算作一个人)
传统的方式:set保存uid,然后就可以统计set中的元素数量作为标准判断
这个方式如果保存大量的用户id,就会比较麻烦,我们的目的是为了计数,而不是保存用户id
使用Hyperloglog的优点:占用的内存是固定的,如果要存放2^64不同的元素的基数,只需要废12KB内存,如果要从内存角度来比较的话,Hyperloglog首选,有0.81%的错误率,统计uv任务可以忽略不计
HyperLogLog 由 Philippe Flajolet 在 原始论文《HyperLogLog: the analysis of a near-optimal cardinality estimation algorithm》 中提出。Redis 中对 HLL 的三个 PFADD/PFCOUNT/PFMERGE,都是以 PF 开头,就是纪念 2011 年已经去世的 Philippe Flajolet 。
pfadd:创建元素
pfcount:统计基数数量
pfmerge:合并
如果允许容错,那么一定可以使用Hyperloglog
如果不允许容错,那么就使用set或者自己的数据类型即可
Bitmaps
位图,数据结构,都是操作二进制位来进行记录,只有0和1两个状态
记录每天是否打卡,1表示打卡,0表示未打卡
获取某天是否打卡
统计总的打卡天数