底层是zset实现的, 可以用zset的命令操作
GEOADD key longitude latitude member [longitude latitude member ...]
geoadd 用于存储指定的地理空间位置,可以将一个或多个经度(longitude)、纬度(latitude)、位置名称(member)添加到指定的 key 中。
两极无法直接添加,一般会下载城市数据,直接通过java程序一次导入
127.0.0.1:6379> geoadd china:city 16.40 39.90 beijing
(integer) 1
127.0.0.1:6379> geoadd china:city 121.47 31.23 shanghai
(integer) 1
127.0.0.1:6379> geoadd china:city 106.50 29.53 chongqing 114.05 22.52 shenzhen
(integer) 2
127.0.0.1:6379> geoadd china:city 120.16 30.24 hangzhou 108.96 34.26 xian
(integer) 2
GEOPOS key member [member ...]
geopos 用于从给定的 key 里返回所有指定名称(member)的位置(经度和纬度),不存在的返回 nil。
127.0.0.1:6379> geopos china:city beijing #获取指定城市的经度和纬度
1) 1) "16.39999955892562866"
2) "39.90000009167092543"
127.0.0.1:6379> geopos china:city chongqing
1) 1) "106.49999767541885376"
2) "29.52999957900659211"
geodist 用于返回两个给定位置之间的距离
GEODIST key member1 member2 [m|km|ft|mi]
最后一个距离单位参数说明:
m :米,默认单位。
km :千米。
mi :英里。
ft :英尺。
127.0.0.1:6379> geodist china:city chongqing hangzhou km #查看重庆到杭州的直线距离
"1318.8910"
georadius 以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。
GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
参数说明:
m :米,默认单位。
km :千米。
mi :英里。
ft :英尺。
WITHDIST: 在返回位置元素的同时, 将位置元素与中心之间的距离也一并返回。
WITHCOORD: 将位置元素的经度和维度也一并返回。
WITHHASH: 以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。 这个选项主要用于底层应用或者调试, 实际中的作用并不大。
COUNT 限定返回的记录数。
ASC: 查找结果根据距离从近到远排序。
DESC: 查找结果根据从远到近排序。
127.0.0.1:6379> GEORADIUS china:city 110 30 1000 km # 以110 30 这个经纬度为中心 寻找方圆1000km内的城市
1) "chongqing"
2) "xian"
3) "shenzhen"
4) "hangzhou"
127.0.0.1:6379> GEORADIUS china:city 110 30 500 km
1) "chongqing"
2) "xian"
georadiusbymember 的中心点是由给定的位置元素决定的
GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
127.0.0.1:6379> GEORADIUSBYMEMBER china:city hangzhou 1000 km #以杭州为中心 半径1000km
1) "hangzhou"
2) "shanghai"
Redis GEO 使用 geohash 来保存地理位置的坐标
geohash 用于获取一个或多个位置元素的 geohash 值。
GEOHASH key member [member ...]
将二维的经纬度转换成一维的字符串,如果两个字符串越接近,则距离越近
127.0.0.1:6379> geohash china:city hangzhou chongqing
1) "wtmkn31bfb0"
2) "wm5xzrybty0"
会有一定误差!!
127.0.0.1:6379> pfadd mykey a b c d e
(integer) 1
127.0.0.1:6379> pfadd mykey1 a b q w o
(integer) 1
127.0.0.1:6379> pfcount mykey
(integer) 5
127.0.0.1:6379> pfcount mykey1
(integer) 5
127.0.0.1:6379> pfmerge mykey3 mykey mykey1
OK
127.0.0.1:6379> pfcount mykey3
(integer) 8
应用场景:
只要是两个状态的,就可以使用bitmaps
bitmaps 都是操作二进制进行位记录
SETBIT key offset value
value只能是0或1
使用bitmap来记录 周一到周日的打卡
127.0.0.1:6379> setbit sign 0 1
(integer) 0
127.0.0.1:6379> setbit sign 1 0
(integer) 0
127.0.0.1:6379> setbit sign 2 0
(integer) 0
127.0.0.1:6379> setbit sign 3 1
(integer) 0
127.0.0.1:6379> setbit sign 4 0
(integer) 0
127.0.0.1:6379> setbit sign 5 0
(integer) 0
127.0.0.1:6379> setbit sign 6 1
(integer) 0
查看某一天是否有打卡
127.0.0.1:6379> getbit sign 3
(integer) 1
127.0.0.1:6379> getbit sign 6
(integer) 1
127.0.0.1:6379> bitcount sign #统计这周的打卡记录
(integer) 3