最近两天在使用redis的geo地理空间命令的时候发现通过字符串长度过长,使用正常的字符串查询方式是无法查询出来的值,如下的命令
geohash merchantLoc 2a10754138bf441da443126a2ae7c18b
这个命令是为了获取key为merchantLoc下的member值为2a10754138bf441da443126a2ae7c18b的字符串的信息,但是运行这个命令的时候无论如何你查询出来的值都是(nil),但是真实情况是有值的,我们可以通过下面这个命令来看存储的值信息
georadius merchantLoc 106 29 100 km with withcoord withdist
运行这个命令是查询一个经纬度的区域半径范围内的所有空间坐标,结果如下
1) 1) "\"2a10754138bf441da443126a2ae7c18b\""
2) "85.0116"
3) 1) "106.49912327527999878"
2) "29.62830620445038932"
2) 1) "\"c2e3be963ae947ef8d9e6888f9b5da79\""
2) "85.0116"
3) 1) "106.49912327527999878"
2) "29.62830620445038932"
3) 1) "\"da38ccaeeb6a4d6a8681736b480c3203\""
2) "85.0116"
3) 1) "106.49912327527999878"
2) "29.62830620445038932"
4) 1) "\"p1\""
2) "85.0116"
3) 1) "106.49912327527999878"
2) "29.62830620445038932"
可以看出来2a10754138bf441da443126a2ae7c18b是有值的,这个时候细心的话已经发现2a10754138bf441da443126a2ae7c18b的表示方式有所不同,看下member值比较短的展示方式
127.0.0.1:7379[4]> georadius us 10 11 100 km withcoord withdist
1) 1) "us1"
2) "0.0002"
3) 1) "10.00000208616256714"
2) "10.9999991200151257"
注意看到没有us1是没有"\"的,而2a10754138bf441da443126a2ae7c18b是有"\"来限定的,这个时候在查询通过"\"来限定的2a10754138bf441da443126a2ae7c18b值就可以出来了
127.0.0.1:7379[4]> geohash merchantLoc '2a10754138bf441da443126a2ae7c18b' "\"c2e3be963ae947ef8d9e6888f9b5da79\""
1) (nil)
2) "wm78x3wm3k0"
所以如果在正常情况下你没有查询出来值的话就需要考虑下是不是member的值太长了,需要添加限定符了。