Geospatial(地理位置)
Geospatial常用语一些地理位置的计算,比如附近的人功能。
# geoadd key 经度 纬度 名称:添加地理位置元素
127.0.0.1:6379> geoadd China 116 40 beijing 121 31 shanghai 113 23 guangzhou 113 22 shenzhen
(integer) 4
# geopos key 名称:获取指定名称的经纬度
127.0.0.1:6379> geopos China beijing shanghai
1) 1) "116.00000113248825073"
2) "39.99999991084916218"
2) 1) "120.99999815225601196"
2) "31.00000097648057817"
# geodist key 名称1 名称2 单位:计算名称1和名称2之间的直线距离
127.0.0.1:6379> geodist China shenzhen guangzhou km
"111.2264"
# georadius key 经度 纬度 距离 单位:查找给定经纬度和范围内的地理位置
127.0.0.1:6379> georadius China 120 30 200 km
1) "shanghai"
# georadiusbymember key 名称 距离 单位:查找给定名称和范围内的地理位置
127.0.0.1:6379> georadiusbymember China shenzhen 200 km
1) "shenzhen"
2) "guangzhou"
# geohash key 名称:将经纬度转换成一个11个字符的geohash值
127.0.0.1:6379> geohash China beijing
1) "wx47x9u8gu0"
eospatial底层是通过Zset实现的,它并没有提供移除命令,我们可以使用Zset来实现删除。
127.0.0.1:6379> zrange China 0 -1
1) "shenzhen"
2) "guangzhou"
3) "shanghai"
4) "beijing"
127.0.0.1:6379> zrem China beijing
(integer) 1
127.0.0.1:6379> zrange China 0 -1
1) "shenzhen"
2) "guangzhou"
3) "shanghai"
Hyperloglog(基数统计)
基数:相当于set中元素的数量,也就是去重后,元素的数量。
一般在统计用户量的时候,会用set去重,最后查看set的大小。实际是这种方式是很耗费存储的。
Hyperloglog的优点是:占用的内存非常小,因为它并不把这些数据存储起来,只是用作计算。统计接近
2
64
2^{64}
264个不同元素,只需要12KB的内存。但是会有一定的错误率,官方说标准误差0.81%。
# 向key1中添加元素
127.0.0.1:6379> pfadd key1 1 2 3 4 5 6 7 8 9
(integer) 1
# 对key做基数统计
127.0.0.1:6379> pfcount key1
(integer) 9
# 向key2中添加元素
127.0.0.1:6379> pfadd key2 1 3 5 7 9 11
(integer) 1
# 合并key1和key2的元素到key3
127.0.0.1:6379> pfmerge key3 key1 key2
OK
# 对key3做基数统计
127.0.0.1:6379> pfcount key3
(integer) 10
Bitmaps(位图)
使用0和1表示状态值,占用存储空间非常小。
# set指令
127.0.0.1:6379> setbit key 0 1
(integer) 0
127.0.0.1:6379> setbit key 1 1
(integer) 0
127.0.0.1:6379> setbit key 2 1
(integer) 0
127.0.0.1:6379> setbit key 3 0
(integer) 0
127.0.0.1:6379> setbit key 4 0
(integer) 0
# get指令
127.0.0.1:6379> getbit key 0
(integer) 1
127.0.0.1:6379> getbit key 3
(integer) 0
# 统计值为1的个数
127.0.0.1:6379> bitcount key
(integer) 3