Heim >Datenbank >Redis >Verwenden Sie Redis, um die WeChat-Shake-Funktion abzuschließen

Verwenden Sie Redis, um die WeChat-Shake-Funktion abzuschließen

齐天大圣
齐天大圣Original
2020-05-20 15:40:202120Durchsuche

Redis bietet eine Funktion für geografische Standortinformationen (GEO), mit der Sie Funktionen wie Personen in der Nähe und Schütteln ausführen können. Lassen Sie uns zunächst die relevanten APIs von GEO vorstellen.

GEO-API

Adressstandortinformationen hinzufügen

geoadd Schlüssel Längengrad Breitengrad Mitglied [Längengrad Breitengrad Mitglied ...]

  • Längengrad: Längengrad

  • Breitengrad: Breitengrad

  • Mitglied: Mitglied

Mit diesem Befehl können ein oder mehrere Mitglieder gleichzeitig hinzugefügt werden

Es gibt einige Benutzer, alle in Hefei, Jetzt hinzufügen Ihre geografischen Koordinaten werden in Redis gespeichert.

  • Der kleine A schaut zu Hause fern. Die Koordinaten seines Zuhauses sind: 117.230279,31.81676

  • Der kleine B macht Überstunden in der Firma , und die Koordinaten des Unternehmens lauten: 117.229704,31.824676

  • Der kleine C ist auf Geschäftsreise und die Adresskoordinaten seiner Geschäftsreise lauten: 117.300419,31.696095

  • Der kleine D kümmert sich zu Hause um sein Baby. Die Adresskoordinaten seines Zuhauses lauten: 117.192909,31.732465

  • Der kleine E ist noch in der Schule und Die Adresskoordinaten seiner Schule lauten: 117.189604,31.838297

127.0.0.1:6379> geoadd location 117.230279 31.81676 a 117.229704 31.824676 b
(integer) 2
127.0.0.1:6379> geoadd location 117.300419 31.696095 c
(integer) 1
127.0.0.1:6379> geoadd location 117.192909 31.732465 d
(integer) 1
127.0.0.1:6379> geoadd location 117.189604 31.838297 e
(integer) 1

Ermitteln Sie die Entfernung zwischen zwei Standorten

Geodist-Schlüsselmitglied1 Mitglied2 [Einheit]

Einheit hat vier Einheiten

  • 'm' => Meter

  • 'km' => Kilometer

  • 'mi ' => Meile

  • 'ft' => Fuß

Wir verwenden hauptsächlich Meter und Kilometer.

Jetzt werfen wir einen Blick auf die Entfernung zwischen Little A und Little B

127.0.0.1:6379> GEODIST location a b km
"0.8821"

Sie können sehen, dass zwischen Little A und Little B 0,88 Kilometer liegen

Nehmen wir a Schauen Sie noch einmal. Die Entfernung zwischen Little C und Little E

127.0.0.1:6379> GEODIST location c e km
"18.9728"

Der Unterschied zwischen ihnen beträgt fast 19 Kilometer.

Adressenstandortinformationen abrufen

Geopos-Schlüsselmitglied [Mitglied ...]

Komm Sehen Sie sich die Längen- und Breitengradinformationen der Adresse von Xiao D an

127.0.0.1:6379> geopos location d
1) 1) "117.19290822744369507"
   2) "31.73246441933707018"

Rufen Sie die Standortsammlung mit geografischen Informationen innerhalb des angegebenen Standortbereichs ab

Georadius-Schlüssel Längengrad Breitengrad Radius km|ft|mi [withcoord] [withdist] [withhash] [COUNT count] [asc|desc] [store key] [storedist key] georadiusbymember key member radiusm km|ft|mi [withcoord] [withdist ] [ withhash] [COUNT count] [asc|desc] [store key] [storedist key]

Diese beiden Befehle sind etwas komplizierter als die anderen. Schauen wir uns diese beiden Befehle zusammen an.

Die Funktionen dieser beiden Befehle sind grundsätzlich ähnlich. Der Hauptunterschied besteht darin, dass der erste Befehl den spezifischen Längen- und Breitengrad angibt, während der zweite Befehl nur den Mitgliedsnamen angibt. Ich möchte zum Beispiel die Entfernung zwischen Mitgliedern und dem Dashu-Berg in Hefei wissen. Da die Längen- und Breitengradinformationen des Dashu-Berges nicht in Redis gespeichert wurden, müssen wir den ersten Befehl verwenden, um den Längen- und Breitengrad des Dashu-Berges einzugeben. Um als weiteres Beispiel den Abstand zwischen anderen Mitgliedern und die Koordinaten von Little A zu bestimmen, können Sie den zweiten Befehl verwenden und Mitglied Little A direkt eingeben.

Radiusm und die folgenden Einheiten sind erforderliche Informationen, die den Radius angeben, in dem gesucht werden soll.

Die Koordinaten des Dashu-Berges in Hefei sind 117.175571,31.846746

# 查看离大蜀山10km的成员有哪些
127.0.0.1:6379> GEORADIUS location 117.175571 31.846746 10 km
1) "e"
2) "a"
3) "b"

Sie können sehen, dass kleines e, kleines a und kleines b relativ nahe am Dashu-Berg liegen, innerhalb von 10 km.

WITHCOORD: Geben Sie den Längen- und Breitengrad des Standortelements zusammen zurück

127.0.0.1:6379> GEORADIUS location 117.175571 31.846746 10 km withcoord
1) 1) "e"
   2) 1) "117.18960374593734741"
      2) "31.83829663190295634"
2) 1) "a"
   2) 1) "117.23027676343917847"
      2) "31.81675910621205361"
3) 1) "b"
   2) 1) "117.22970277070999146"
      2) "31.8246750403926697"

Wie Sie sehen können, ist zusätzlich zu den Mitgliedern auch die Standortinformationsseite des Mitglieds enthalten Gegeben

withdist: Das zurückgegebene Ergebnis enthält die Entfernung von der zentralen Knotenposition

127.0.0.1:6379> GEORADIUS location 117.175571 31.846746 10 km withcoord withdist
1) 1) "e"
   2) "1.6252"
   3) 1) "117.18960374593734741"
      2) "31.83829663190295634"
2) 1) "a"
   2) "6.1522"
   3) 1) "117.23027676343917847"
      2) "31.81675910621205361"
3) 1) "b"
   2) "5.6737"
   3) 1) "117.22970277070999146"
      2) "31.8246750403926697"

Sie können sehen, dass das kleine E 1,62 Kilometer von Da Shushan entfernt ist und das kleine A ist 1,62 Kilometer vom Berg Da Shu entfernt, Shushan ist 6,15 Kilometer entfernt und Little B ist 5,67 Kilometer von Shushan entfernt.

withhash: Dieser Befehl kann ignoriert und grundsätzlich nicht verwendet werden

COUNT count: Geben Sie die Anzahl der zurückgegebenen Ergebnisse an.

asc|desc: Die zurückgegebenen Ergebnisse sind in aufsteigender oder absteigender Reihenfolge entsprechend der Entfernung vom Mittelknoten.

storedist key: Speichern Sie den Abstand des zurückgegebenen Ergebnisses vom Mittelknoten zum angegebenen Schlüssel.

# 获取离大蜀山100km内范围的成员,按距离的升序,只需给出最近的4个成员即可
127.0.0.1:6379> GEORADIUS location 117.175571 31.846746 100 km withdist count 4 asc
1) 1) "e"
   2) "1.6252"
2) 1) "b"
   2) "5.6737"
3) 1) "a"
   2) "6.1522"
4) 1) "d"
   2) "12.8164"

Praktischer Kampf

Nachdem Sie die oben genannten Kenntnisse eingeführt haben, können Sie PHP in Kombination mit Redis verwenden, um den Shake abzuschließen, um Personen zu finden Funktion in der Nähe. Speichern Sie zunächst die Standortinformationen der Mitglieder.

伪代码如下:

function addLocation ($key,$member, $lng, $lat)
{
    $redis->geoadd($key, $lng, $lat, $member);
}

然后,获取附近的人的信息

function near (
    $key, 
    $member, 
    $radius, 
    $unit = 'km', 
    $count = 0,  
    $withDist = false, 
    $withcoord = false, 
    $orderby = 'ASC'
)
{
    $redis = new Redis();
    $redis->connect('localhost', 6379);
    $options = [$orderby];
    if ($count > 0) {
        $options['count'] = $count;
    }
    if ($withDist) {
        $options[] = 'WITHDIST';
    }
    if ($withcoord) {
        $options[] = 'WITHCOORD';
    }
    $result = $redis->geoRadiusByMember($key, $member, $radius, $unit, $options);
    return $result;
}

使用redis可以大大方便开发人员,丰富的API可以完成各种各样的需求,Redis的使用已经成为程序员必备的技能了。

Das obige ist der detaillierte Inhalt vonVerwenden Sie Redis, um die WeChat-Shake-Funktion abzuschließen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn