Heim  >  Artikel  >  Datenbank  >  Redis spezieller Datentyp Geospatial

Redis spezieller Datentyp Geospatial

WBOY
WBOYnach vorne
2022-10-12 16:21:351591Durchsuche

Im vorherigen Artikel „Redis Special Data Type Stream“ habe ich Ihnen die relevanten Inhalte zum Datentyp Stream vorgestellt alle.

Empfohlenes Lernen: Redis spezieller Datentyp GeospatialRedis-Video-Tutorial

Vorwort

Wir alle wissen, dass Redis eine Fülle von Datentypen bereitstellt, vier spezielle: BitMap, HyperLogLog, Geospatial und Stream.

Heute werden wir ausführlich über Geospatial sprechen, einen der vier speziellen Datentypen von Redis.

Anwendungsszenarien: Szenarien zum Speichern geografischer Standortinformationen, z. B. Didi-Taxi-Anrufe Rechte liegen beim Autor. Für den kommerziellen Nachdruck wenden Sie sich bitte an den Autor, um eine Genehmigung einzuholen. Für den nichtkommerziellen Nachdruck geben Sie bitte die Quelle an.

Redis Geospatial ist ein neuer Datentyp in Redis Version 3.2. Er wird hauptsächlich zum Speichern geografischer Standortinformationen und zum Bearbeiten der gespeicherten Informationen verwendet.

In unserem täglichen Leben verlassen wir uns zunehmend auf die Suche nach „Restaurants in der Nähe“ und das Rufen von Taxis über Taxi-Hailing-Apps, die alle untrennbar mit Location-Based Service (LBS)-Anwendungen verbunden sind. Bei den Daten, auf die die LBS-Anwendung zugreift, handelt es sich um eine Reihe von Längen- und Breitengradinformationen, die Personen oder Dingen zugeordnet sind. Wenn benachbarte Längen- und Breitengrade abgefragt werden müssen, eignet sich GEO sehr gut für die Anwendung in LBS-Dienstszenarien.

Interne Implementierung
GEO selbst hat keine neue zugrunde liegende Datenstruktur entworfen, sondern direkt den Sammlungstyp Sorted Set verwendet.

Der GEO-Typ verwendet die GeoHash-Kodierungsmethode, um Längen- und Breitengrad in Elementgewichtungswerte im sortierten Satz umzuwandeln. Die beiden Schlüsselmechanismen sind „Intervallteilung der zweidimensionalen Karte“ und „Intervallkodierung“. Nachdem ein Satz von Längen- und Breitengraden in ein bestimmtes Intervall fällt, wird er durch den Codierungswert des Intervalls dargestellt und der Codierungswert wird als Gewichtsbewertung des Sorted Set-Elements verwendet.

Auf diese Weise können wir den Längen- und Breitengrad im sortierten Satz speichern und die vom sortierten Satz bereitgestellte Funktion „Suche nach geordnetem Bereich nach Gewicht“ verwenden, um die in LBS-Diensten häufig verwendete Anforderung „Suche in der Nähe“ zu erfüllen.

Allgemeine Befehle

# 存储指定的地理空间位置,可以将一个或多个经度(longitude)、纬度(latitude)、位置名称(member)添加到指定的 key 中。
GEOADD key longitude latitude member [longitude latitude member ...]
# 从给定的 key 里返回所有指定名称(member)的位置(经度和纬度),不存在的返回 nil。
GEOPOS key member [member ...]
# 返回两个给定位置之间的距离。
GEODIST key member1 member2 [m|km|ft|mi]
# 根据用户给定的经纬度坐标来获取指定范围内的地理位置集合。
GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]

Anwendungsszenarien

Didi-Hailing

Am Beispiel des Didi-Hailing-Szenarios stellen wir hier die Verwendung der GEO-Befehle GEOADD und GEORADIUS vor.

Angenommen, die Fahrzeug-ID ist 33 und der Breiten- und Längengrad ist (116.034579, 39.030452). Wir können eine GEO-Sammlung verwenden, um den Breiten- und Längengrad aller Fahrzeuge zu speichern.

Führen Sie den folgenden Befehl aus, um den aktuellen Breiten- und Längengrad des Fahrzeugs mit der ID-Nummer 33 in der GEO-Sammlung zu speichern:

GEOADD cars:locations 116.034579 39.030452 33
Wenn der Benutzer einen Online-Ride-Hailing-Dienst in seiner Nähe finden möchte, kann die LBS-Anwendung diese verwenden der GEORADIUS-Befehl. Wenn die LBS-Anwendung beispielsweise den folgenden Befehl ausführt, sucht Redis basierend auf den Breiten- und Längengradinformationen des eingegebenen Benutzers (116.054579, 39.030452) nach Fahrzeuginformationen innerhalb von 5 Kilometern, zentriert auf diesem Längen- und Breitengrad, und gibt sie an das LBS zurück Anwendung.

GEORADIUS cars:locations 116.054579 39.030452 5 km ASC COUNT 10

Empfohlenes Lernen:

Redis-Video-Tutorial

Das obige ist der detaillierte Inhalt vonRedis spezieller Datentyp Geospatial. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:juejin.im. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen
Vorheriger Artikel:Redis-Spezialdatentyp-StreamNächster Artikel:Redis-Spezialdatentyp-Stream