Redis GEO

Redis GEO в основном используется для хранения информации о географическом местоположении и выполнения операций с сохранённой информацией. Эта функция была добавлена в Redis версии 3.2.

Методы работы с Redis GEO включают:

  • geoadd: Добавить координаты географического местоположения.
  • geopos: Получить координаты географического местоположения.
  • geodist: Рассчитать расстояние между двумя местоположениями.
  • georadius: Получить набор географических местоположений в пределах указанного диапазона на основе координат долготы и широты, заданных пользователем.
  • georadiusbymember: Получить набор географических местоположений в пределах указанного диапазона на основе местоположения, сохранённого в наборе местоположений.
  • geohash: возвращает значение geohash для одного или нескольких объектов местоположения.

geoadd

geoadd используется для сохранения указанных геопространственных позиций. Он может добавить одну или несколько долгот, широт и названий местоположений (элементов) в указанный ключ.

Синтаксис geoadd следующий:

GEOADD key longitude latitude member [longitude latitude member ...]

В следующем примере ключ — Sicily, а Palermo и Catania — названия местоположений:

Пример

redis> GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania"
(целое число) 2
redis> GEODIST Sicily Palermo Catania
"166274.1516"
redis> GEORADIUS Sicily 15 37 100 km
1) "Catania"
redis> GEORADIUS Sicily 15 37 200 km
1) "Palermo"
2) "Catania"
redis>

geopos

geopos используется для возврата позиций (долготы и широты) всех указанных имён (элементов) из заданного ключа. Для несуществующих возвращается nil.

Формат синтаксиса geopos следующий:

GEOPOS key member [member ...]

Пример

redis> GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania"
(целое число) 2
redis> GEOPOS Sicily Palermo Catania NonExisting
1) 1) "13.36138933897018433"
   2) "38.11555639549629859"
2) 1) "15.08726745843887329"
   2) "37.50266842333162032"
3) (nil)
redis>

geodist

geodist используется для возврата расстояния между двумя заданными местоположениями.

Формат синтаксиса geodist следующий:

GEODIST key member1 member2 [m|km|ft|mi]

member1 и member2 — это две географические локации.

Пояснение к последнему параметру единицы расстояния:

  • m: метры, единица по умолчанию.
  • km: километры.
  • mi: мили.
  • ft: футы.
  • Вычислите расстояние между Palermo и Catania:

    Пример

    redis> GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania"
    (целое число) 2
    redis> GEODIST Sicily Palermo Catania
    "166274.1516"
    redis> GEODIST Sicily Palermo Catania km
    "166.2742"
    redis> GEODIST Sicily Palermo Catania mi
    "103.3182"
    redis> GEODIST Sicily Foo Bar
    (nil)
    redis>

    georadius, georadiusbymember

    georadius принимает заданные долготу и широту в качестве центра и возвращает все элементы местоположения в ключе, расстояние от центра до которых не превышает заданное максимальное расстояние.

    georadiusbymember совпадает с командой GEORADIUS; обе могут находить элементы, расположенные в пределах указанного диапазона. Однако центральная точка georadiusbymember определяется заданным элементом местоположения, а не с помощью долготы и широты.

    Форматы синтаксиса georadius и georadiusbymember следующие:

    GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
    GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]

    Описание параметра:

    • m: метры, единица по умолчанию.
    • km: километры.
    • mi: мили.
    • ft: футы.
    • WITHDIST: при возврате элементов местоположения также возвращает расстояние между элементом местоположения и центром.
    • WITHCOORD: также возвращает долготу и широту элемента местоположения.
    • WITHHASH: возвращает значение score элемента местоположения в отсортированном множестве после исходного geohash-кодирования в виде 52-битного целого числа со знаком. Эта опция в основном используется для низкоуровневых приложений или отладки, и её практическое применение ограничено.
    • COUNT ограничивает количество возвращаемых записей.
    • ASC: сортирует результаты поиска по расстоянию от ближних к дальним.
    • DESC: сортировать результаты поиска от дальних к ближним.

    Пример georadius:

    Пример

    redis> GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania"
    (целое число) 2
    redis> GEORADIUS Sicily 15 37 200 km WITHDIST
    1) 1) "Palermo"
       2) "190.4424"
    2) 1) "Catania"
       2) "56.4413"
    redis> GEORADIUS Sicily 15 37 200 km WITHCOORD
    1) 1) "Palermo"
       2) 1) "13.36138933897018433"
          2) "38.11555639549629859"
    2) 1) "Catania"
       2) 1) "15.08726745843887329"
          2) "37.50266842333162032"
    redis> GEORADIUS Sicily 15 37 200 km WITHDIST WITHCOORD
    1) 1) "Palermo"
       2) "190.4424"
       3) 1) "13.36138933897018433"
          2) "38.11555639549629859"
    2) 1) "Catania"
       2) "56.4413"
       3) 1) "15.08726745843887329"
          2) "37.50266842333162032"
    redis>

    Пример georadiusbymember:

    Пример

    redis> GEOADD Sicily 13.583333 37.316667 "Agrigento"
    (целое число) 1
    redis> GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania"
    (целое число) 2
    redis> GEORADIUSBYMEMBER Sicily Agrigento 100 km
    1) "Agrigento"
    2) "Palermo"
    redis>

    geohash

    Redis GEO использует geohash для сохранения координат географических местоположений.

    geohash используется для получения значения geohash одного или нескольких элементов местоположения.

    Формат синтаксиса geohash следующий:

    GEOHASH key member [member ...]

    Пример:

    Пример

    redis> GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania"
    (целое число) 2
    redis> GEOHASH Sicily Palermo Catania
    1) "sqc8b49rny0"
    2) "sqdtr74hyu0"
    redis>
    Другие расширения