Home >Backend Development >PHP Tutorial >PHP and REDIS: How to implement real-time geographical location query and push

PHP and REDIS: How to implement real-time geographical location query and push

WBOY
WBOYOriginal
2023-07-22 13:36:18939browse

PHP and REDIS: How to realize real-time geographical location query and push

With the development of the Internet, the application of geographical location information is becoming more and more widespread, such as real-time delivery, nearby attractions or merchant recommendations, etc. At the same time, querying and pushing real-time geographical location has also become a challenge faced by developers. In this article, we will introduce how to use PHP and REDIS to implement real-time geographical location query and push functions.

First of all, we need to understand the basic concepts and usage of REDIS. REDIS is an in-memory database that supports a variety of data structures, such as strings, lists, hash tables, etc. We can use the Sorted Set of REDIS to implement the storage and query functions of geographical location. An ordered set is an ordered collection of strings. Each string is associated with a score and can be sorted according to the score. In a geolocation application, we can store the latitude and longitude as fractions and place names as strings in an ordered collection.

The following is a sample code that demonstrates how to use REDIS to store geolocation information:

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

In the above sample code, we first create a REDIS connection and then use geoadd The command stores the latitude and longitude information and location names of Beijing and Shanghai. Next, use the georadius command to query locations within 200 kilometers from the current location (longitude 116.407526, latitude 39.90403), and use the WITHDIST option to return distance information. Finally, iterate through the query results and print out the location name and distance information.

In addition to the query function, we can also use the publish and subscribe (Pub/Sub) function of REDIS to achieve real-time push of geographical location. Suppose we have an application that needs to push nearby business information to users in real time. We can use the following code to achieve this:

<?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;
    }
}
?>

In the above code, we use the subscribe method to subscribe to the name location_update channel, and specify a callback function callback. When the geographical location information is updated, the callback function will be triggered. In the callback function, we can query nearby business information in real time based on geographical location information and push this business information to the user.

Through the above code examples, we can see that it is very simple and efficient to use PHP and REDIS to query and push real-time geographical location. Whether in application scenarios such as real-time delivery and nearby merchant recommendations, these functions can bring great convenience and experience improvement. Of course, the above code example is just a simple demonstration, and actual applications require further development and optimization based on specific needs. I hope this article will be helpful for you to understand and apply PHP and REDIS to implement real-time geographical location query and push.

The above is the detailed content of PHP and REDIS: How to implement real-time geographical location query and push. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn