Heim  >  Artikel  >  Backend-Entwicklung  >  PHP und REDIS: So implementieren Sie geografische Standortabfragen und Push in Echtzeit

PHP und REDIS: So implementieren Sie geografische Standortabfragen und Push in Echtzeit

WBOY
WBOYOriginal
2023-07-22 13:36:18902Durchsuche

PHP und REDIS: So implementieren Sie geografische Standortabfragen und -Push in Echtzeit

Mit der Entwicklung des Internets wird die Anwendung geografischer Standortinformationen immer weiter verbreitet, beispielsweise für Echtzeitlieferungen, nahegelegene Sehenswürdigkeiten oder Händlerempfehlungen , usw. Gleichzeitig ist die Abfrage und Übertragung des geografischen Standorts in Echtzeit auch zu einer Herausforderung für Entwickler geworden. In diesem Artikel stellen wir vor, wie Sie PHP und REDIS verwenden, um geografische Standortabfragen und Push-Funktionen in Echtzeit zu implementieren.

Zunächst müssen wir die grundlegenden Konzepte und die Verwendung von REDIS verstehen. REDIS ist eine In-Memory-Datenbank, die eine Vielzahl von Datenstrukturen wie Strings, Listen, Hash-Tabellen usw. unterstützt. Wir können den Sorted Set von REDIS verwenden, um die Speicher- und Abfragefunktionen des geografischen Standorts zu implementieren. Eine geordnete Menge ist eine geordnete Sammlung von Zeichenfolgen. Jede Zeichenfolge ist einer Punktzahl zugeordnet und kann nach der Punktzahl sortiert werden. In einer Geolokalisierungsanwendung können wir den Breiten- und Längengrad als Brüche und die Ortsnamen als Zeichenfolgen in einer geordneten Sammlung speichern.

Das Folgende ist ein Beispielcode, der zeigt, wie REDIS zum Speichern von Geolokalisierungsinformationen verwendet wird:

<?php
// 连接REDIS服务器
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);

// 存储地理位置信息
$redis->geoadd('locations', 116.397128, 39.916527, '北京');
$redis->geoadd('locations', 121.473701, 31.230416, '上海');

// 查询附近的地点
$nearby = $redis->georadius('locations', 116.407526, 39.90403, 200, 'km', ['WITHDIST', 'ASC']);

// 打印查询结果
foreach ($nearby as $location) {
    echo $location[0] . '距离当前位置' . $location[1] . '公里' . PHP_EOL;
}

// 关闭REDIS连接
$redis->close();
?>

Im obigen Beispielcode erstellen wir zunächst eine REDIS-Verbindung und verwenden dann den Befehl geoadd zum Speichern Peking und Breiten- und Längengradinformationen sowie Ortsnamen von Shanghai. Als nächstes verwenden Sie den Befehl georadius, um Standorte im Umkreis von 200 Kilometern um den aktuellen Standort abzufragen (Längengrad 116,407526, Breitengrad 39,90403) und verwenden Sie die Option WITHDIST, um Entfernungsinformationen zurückzugeben. Gehen Sie abschließend die Abfrageergebnisse durch und drucken Sie den Standortnamen und die Entfernungsinformationen aus. geoadd命令存储了北京和上海的经纬度信息和地点名称。接下来,使用georadius命令查询距离当前位置(经度116.407526,纬度39.90403)200公里范围内的地点,并使用WITHDIST选项返回距离信息。最后,遍历查询结果,打印出地点名称和距离信息。

除了查询功能,我们还可以使用REDIS的发布与订阅(Pub/Sub)功能来实现地理位置的实时推送。假设我们有一个应用需要实时推送附近的商家信息给用户,我们可以使用以下代码来实现:

<?php
// 连接REDIS服务器
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);

// 订阅地理位置更新频道
$redis->subscribe(['location_update'], 'callback');

function callback($redis, $channel, $message) {
    // 根据地理位置信息查询附近的商家
    $nearby = $redis->georadius('locations', $message['longitude'], $message['latitude'], 5, 'km', ['COUNT', 10]);

    // 推送附近商家信息给用户
    foreach ($nearby as $location) {
        echo '附近商家:' . $location[0] . PHP_EOL;
    }
}
?>

上述代码中,我们使用subscribe方法来订阅名为location_update的频道,并指定一个回调函数callback

Zusätzlich zur Abfragefunktion können wir auch die Veröffentlichungs- und Abonnementfunktion (Pub/Sub) von REDIS verwenden, um einen Echtzeit-Push des geografischen Standorts zu erreichen. Angenommen, wir haben eine Anwendung, die in Echtzeit Geschäftsinformationen in der Nähe an Benutzer weiterleiten muss. Dazu können wir den folgenden Code verwenden:

rrreee

Im obigen Code verwenden wir zum Abonnieren die Methode subscribe Fügen Sie dem Kanal den Namen location_update hinzu und geben Sie eine Rückruffunktion <code>callback an. Wenn die geografischen Standortinformationen aktualisiert werden, wird die Rückruffunktion ausgelöst. In der Rückruffunktion können wir basierend auf geografischen Standortinformationen in Echtzeit Geschäftsinformationen in der Nähe abfragen und diese Geschäftsinformationen an den Benutzer weiterleiten. 🎜🎜Anhand der obigen Codebeispiele können wir sehen, dass es sehr einfach und effizient ist, PHP und REDIS zum Abfragen und Pushen des geografischen Standorts in Echtzeit zu verwenden. Ob in Anwendungsszenarien wie Echtzeitlieferung und Empfehlungen von Händlern in der Nähe, diese Funktionen können großen Komfort und ein verbessertes Erlebnis bringen. Natürlich ist das obige Codebeispiel nur eine einfache Demonstration, und tatsächliche Anwendungen erfordern eine weitere Entwicklung und Optimierung basierend auf spezifischen Anforderungen. Ich hoffe, dieser Artikel wird Ihnen dabei helfen, PHP und REDIS zu verstehen und anzuwenden, um eine geografische Standortabfrage in Echtzeit zu implementieren und schieben. 🎜

Das obige ist der detaillierte Inhalt vonPHP und REDIS: So implementieren Sie geografische Standortabfragen und Push in Echtzeit. 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