Как выполнить геопространственные операции над хэшированием Redis - PullRequest
1 голос
/ 07 февраля 2020

Я читаю документы для Redis Geospatial и вижу, что могу хранить только key, latitude, longitude и name.

У меня есть несколько хэшей, например как events:id, listings:id, et c. События, например, содержат JSON для объекта события. Это потому, что эти элементы не сильно меняются, и я кеширую их в redis.

Чтобы найти какой-нибудь events в пределах некоторого радиуса, как я могу это сделать?

Должен ли я сделать что-то подобное?

GEOADD [event:id] {event.latitude} {event.longitude} {event.id}

а затем сопоставить их с events:id га sh?

1 Ответ

1 голос
/ 08 февраля 2020

GEOADD key longitude latitude member добавляет запись (member с longitude и latitude) к отсортированному набору key, геопространственному индексу. Сортированный создается, если он не существует.

Чтобы иметь возможность запрашивать события в пределах некоторого радиуса, вы хотите, чтобы все ваши события были в одном и том же геопространственном отсортированном наборе.

Это означает, что вы добавляете все к одному и тому же ключу, используя:

GEOADD events:location {event.longitude} {event.latitude} {event.id}

Вы можете добавить более одного события за раз:

GEOADD events:location 13.361389 38.115556 "event:1" 15.087269 37.502669 "event:2"

Примечание долгота идет первой

Затем вы получаете все события рядом с определенным пользователем местоположением, используя GEORADIUS

> GEORADIUS events:location 15 37 200 km WITHDIST
1) 1) "event:1"
   2) "190.4424"
2) 1) "event:2"
   2) "56.4413"

Другие доступные команды:

  • GEODIST - расстояние между двумя элементами
  • GEOHASH - Geoha sh строк, представляющих позицию
  • GEOPOS - позиции (долгота, широта) всех указанных членов
  • GEORADIUSBYMEMBER - как GEORADIUS, но принимает имя члена уже существует внутри геопространственного индекса

Вы также можете использовать отсортированные команды set в геопространственном индексе. Например, чтобы узнать, сколько событий у вас есть в геопространственном индексе:

> ZCARD events:location
(integer) 2

Вы можете использовать ваше целое JSON кодированное событие в качестве члена геопространственного индекса или просто event:id, который также является ключом к другому ключу с данными события, ваш звонок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...