我是 Redis 新手。我需要存储多个位置数据,如下所示:
[
[
name: "shop 1",
address: "Address1",
zip: 12345,
lng: 13.00,
lat:37.00
], [
name: "shop 2",
address: "Address2",
zip: 67890,
lng: 15.00,
lat:38.00
],
//…
]
我可以使用 GEOADD 并使用 GEORADIUS 进行搜索。 但是,GEOADD 只接受 lng、lat 和一个参数。我还需要存储所有其他字段。并且需要根据地址/ zip 进行搜索。
有可用的例子吗?
最佳答案
我在自己的应用中采用以下策略解决了这个问题。
插入数据
HSET shop:payload:shop1 name "shop 1" address "address 1" zip 12345
HSET shop:payload:shop2 name "shop 2" address "address 2" zip 67890
GEOADD shop:geo 13.00 37.00 "shop1"
GEOADD shop:geo 15.00 38.00 "shop2"
查询id
GEORADIUS shop:geo 14.00 38.00 100 mi WITHDIST WITHCOORD
> shop2,54.4615,14.99999910593032837,38.0000009925631943
> shop1,88.2202,12.99999922513961792,37.00000026605963654
查询有效负载(我使用管道试图加快速度)
HGETALL shop:payload:shop2
> {
> "name": "shop 2",
> "address": "address 2",
> "zip": "67890"
> }
HGETALL shop:payload:shop1
> {
> "name": "shop 1",
> "address": "address 1",
> "zip": "12345"
> }
然后在后端加入数据。
[
{
"name": "shop 2",
"address": "address 2",
"zip": "67890",
"dist": 54.4615,
"lon": 14.99999910593032837,
"lat": 38.0000009925631943
},
{
"name": "shop 1",
"address": "address 1",
"zip": "12345",
"dist": 88.2202,
"lon": 12.99999922513961792,
"lat": 37.00000026605963654
}
]
关于php - 如何在 redis 中使用 GEOADD 存储额外数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55476163/