Skip to main content

Що таке Geospatial типи в Redis?

Geospatial типи в Redis - це набір команд, що дозволяють зберігати й обробляти географічні координати (довготу й широту), а також виконувати швидкі геопросторові запити - наприклад, пошук найближчих точок чи обчислення відстані між ними.

Redis не має окремого "гео-типу" даних - геодані зберігаються всередині Sorted Set (ZSet), де score використовується для кодування координат.

Як це влаштовано

Кожна геолокація - це пара (довгота, широта), яка перетворюється на спеціальний числовий код (Geohash). Цей код зберігається як score у відсортованій множині (ZSet). Таким чином Redis може:

  • додавати точки на карту,
  • знаходити найближчі точки до заданої,
  • обчислювати відстані,
  • фільтрувати за радіусом.

Основні команди

КомандаОпис
GEOADD key longitude latitude member [longitude latitude member ...]додати одну чи кілька точок
GEOPOS key member [member ...]отримати координати точки
GEODIST key member1 member2 [unit]обчислити відстань між точками
GEORADIUS key longitude latitude radius unit [options]знайти точки в радіусі (застаріла, замінена на GEOSEARCH)
GEOSEARCH key FROMMEMBER <member> BYRADIUS <radius> <unit>знайти точки навколо іншої точки
GEOSEARCH key FROMLONLAT <lon> <lat> BYBOX <width> <height> <unit>пошук за областю (прямокутником)
GEOHASH key member [member ...]отримати геохеші (у вигляді коротких рядків)

Приклад

bash
GEOADD cities 37.618423 55.751244 "Moscow" GEOADD cities 30.31413 59.93863 "Saint-Petersburg" GEODIST cities "Moscow" "Saint-Petersburg" km

Результат:

javascript
633.4789

Приклад пошуку в радіусі

bash
GEOADD shops 37.6 55.7 "Shop1" 37.65 55.75 "Shop2" 37.7 55.8 "Shop3" GEOSEARCH shops FROMLONLAT 37.61 55.74 BYRADIUS 10 km WITHDIST

Результат:

javascript
1) "Shop1" (0.4 km) 2) "Shop2" (5.7 km) 3) "Shop3" (9.8 km)

Одиниці вимірювання

Підтримуються:

  • m - метри
  • km - кілометри
  • mi - милі
  • ft - фути

Внутрішня будова

  • Кожна точка зберігається в ZSet, де score - це 52-бітне геокодоване значення (Geohash).
  • Redis використовує алгоритм Mercator projection для наближеного перетворення координат у числа.
  • Пошук працює через діапазонні операції за score, що робить його дуже швидким - O(log N).

Застосування

  • Пошук найближчих магазинів, точок доставки чи водіїв.
  • Геоаналітика - густина точок, активність за регіонами.
  • Ігрові та логістичні системи з геолокацією.
  • Відстеження об'єктів у реальному часі.

Приклад практичного кейсу

bash
GEOADD couriers 37.61 55.75 "Courier:101" GEOADD couriers 37.63 55.76 "Courier:102" GEOSEARCH couriers FROMMEMBER "Courier:101" BYRADIUS 2 km WITHDIST

Можна миттєво знайти всіх кур'єрів у радіусі 2 км від заданого.

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.