Що таке 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
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.