三、Redis三大特殊类型
一、geospatial
GEOADD 将指定的地理空间位置(纬度、经度、名称)添加到指定的key中。
GEOADD china:city 116 39 beijing 121 31 shanghai
GEOPOS 从key里返回所有给定位置元素的位置(经度和纬度)。
GEOPOS china:city beijing
GEODIST 返回两个给定位置之间的距离。
GEODIST china:city beijing shanghai km
GEORADIUS 以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。(可以应用于附近的人的情况。)
GEORADIUS china:city 110 50 1000 km
GEORADIUSBYMEMBER 这个命令和 GEORADIUS 命令一样, 都可以找出位于指定范围内的元素, 但是 GEORADIUSBYMEMBER 的中心点是由给定的位置元素决定的, 而不是像 GEORADIUS 那样, 使用输入的经度和纬度来决定中心点
指定成员的位置被用作查询的中心。
GEORADIUSBYMEMBER china:city beijing 1000 km
GEOHASH返回一个或多个位置元素的 Geohash 表示。该命令将返回11个字符的Geohash字符串。
GEOHASH china:city beijing shanghai
注:GEO底层就是Zset,因此可以用Zset的一些指令。
如:ZRANGE china:city beijing
二、HyperLogLogs
简介:Redis 2.8.9版本就更新了 Hyperloglog 数据结构!Redis Hyperloglog基数统计的算法!
优点:占用的内存是固定,2^64不同的元素的技术,只需要废12KB内存!如果要从内存角度来比较的话Hyperloglog首选!
优点:占用的内存是固定,2^64不同的元素的技术,只需要废12KB内存!如果要从内存角度来比较的话Hyperloglog首选!
网页的浏览量UV(一个人访问一个网站多次,但是还是算作一个人!):
传统的方式,set保存用户的id,然后就可以统计set 中的元素数量作为标准判断!
这个方式如果保存大量的用户id,就会比较麻烦!我们的目的是为了计数,而不是保存用户id
0.81%错误率!统计UV任务,可以忽略不计的!
1. PFADD 和 PFCOUNT
> pfadd hll a b c d (integer) 1
> pfcount hll (integer) 4
2. PFMERGE:
redis> PFADD hll1 foo bar zap a (integer) 1
redis> PFADD hll2 a b c foo (integer) 1
redis> PFMERGE hll3 hll1 hll2 OK
redis> PFCOUNT hll3 (integer) 6
三、Bitmaps
案例:统计打卡天数
1. SETBIT
SETBIT sign 0 1
SETBIT sign 1 0
SETBIT sign 2 1
SETBIT sign 3 0
SETBIT sign 4 1
SETBIT sign 5 0
SETBIT sign 6 1
2. GETBIT
GETBIT sign 6
3.BITCOUNT
BITCOUNT sign