Maison >développement back-end >tutoriel php >PHP et REDIS : Comment implémenter une requête et un push de localisation géographique en temps réel

PHP et REDIS : Comment implémenter une requête et un push de localisation géographique en temps réel

WBOY
WBOYoriginal
2023-07-22 13:36:18938parcourir

PHP et REDIS : Comment mettre en œuvre des requêtes et des push de localisation géographique en temps réel

Avec le développement d'Internet, les applications d'informations de localisation géographique sont de plus en plus répandues, comme la livraison en temps réel, les attractions à proximité ou les recommandations de commerçants , etc. Dans le même temps, interroger et déterminer la localisation géographique en temps réel est également devenu un défi pour les développeurs. Dans cet article, nous présenterons comment utiliser PHP et REDIS pour implémenter des fonctions de requête et de push de localisation géographique en temps réel.

Tout d'abord, nous devons comprendre les concepts de base et l'utilisation de REDIS. REDIS est une base de données en mémoire qui prend en charge diverses structures de données, telles que des chaînes, des listes, des tables de hachage, etc. Nous pouvons utiliser l'ensemble trié de REDIS pour implémenter les fonctions de stockage et de requête de localisation géographique. Un ensemble ordonné est une collection ordonnée de chaînes. Chaque chaîne est associée à une partition et peut être triée en fonction de la partition. Dans une application de géolocalisation, nous pouvons stocker la latitude et la longitude sous forme de fractions et les noms de lieux sous forme de chaînes dans une collection ordonnée.

Ce qui suit est un exemple de code qui montre comment utiliser REDIS pour stocker des informations de géolocalisation :

<?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();
?>

Dans l'exemple de code ci-dessus, nous créons d'abord une connexion REDIS, puis utilisons la commande geoadd pour stocker Pékin, informations sur la latitude et la longitude et noms de lieux de Shanghai. Ensuite, utilisez la commande georadius pour interroger des emplacements dans un rayon de 200 kilomètres de l'emplacement actuel (longitude 116,407526, latitude 39,90403) et utilisez l'option WITHDIST pour renvoyer les informations de distance. Enfin, parcourez les résultats de la requête et imprimez le nom de l'emplacement et les informations de distance. 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

En plus de la fonction de requête, nous pouvons également utiliser la fonction de publication et d'abonnement (Pub/Sub) de REDIS pour obtenir une localisation géographique en temps réel. Supposons que nous ayons une application qui doit transmettre des informations sur les entreprises à proximité aux utilisateurs en temps réel. Nous pouvons utiliser le code suivant pour y parvenir :

rrreee

Dans le code ci-dessus, nous utilisons la méthode subscribe pour nous abonner. au nom du canal location_update et spécifiez une fonction de rappel <code>callback Lorsque les informations de localisation géographique sont mises à jour, la fonction de rappel sera déclenchée. Dans la fonction de rappel, nous pouvons interroger les informations commerciales à proximité en temps réel sur la base des informations de localisation géographique et transmettre ces informations commerciales à l'utilisateur. 🎜🎜À travers les exemples de code ci-dessus, nous pouvons voir qu'il est très simple et efficace d'utiliser PHP et REDIS pour interroger et pousser la localisation géographique en temps réel. Que ce soit dans des scénarios d'application tels que la livraison en temps réel et les recommandations de commerçants à proximité, ces fonctions peuvent apporter une grande commodité et une expérience améliorée. Bien sûr, l'exemple de code ci-dessus n'est qu'une simple démonstration, et les applications réelles nécessitent un développement et une optimisation supplémentaires en fonction de besoins spécifiques. J'espère que cet article vous sera utile pour comprendre et appliquer PHP et REDIS pour implémenter une requête de localisation géographique en temps réel. et poussez. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn