php - 如何在 redis 中使用 GEOADD 存储额外数据

标签 php redis

我是 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/

相关文章:

php - 使用 MySQL 中的临时表

php - Magento - 在本地使用 "mage"命令行工具

php - 我正在尝试在页面上抓取带有 id 的特定 div

python - Celery + Redis - .get() 平稳运行约 70 小时后无限期挂起

用于显示数据的 Redis Admin UI

Spring框架+NoSQL

php - 使用 Codeigniter 生成包含 2 个表的 CSV

php - 如何在 PHP 中使用对 PCRE 的反向引用?

python - Redis 实现后 Django session 停止工作

amazon-web-services - 连接到不同 aws 区域中可用的 Redis