Rumah  >  Artikel  >  pembangunan bahagian belakang  >  PHP dan REDIS: Bagaimana untuk melaksanakan pertanyaan lokasi geografi masa nyata dan tolak

PHP dan REDIS: Bagaimana untuk melaksanakan pertanyaan lokasi geografi masa nyata dan tolak

WBOY
WBOYasal
2023-07-22 13:36:18864semak imbas

PHP dan REDIS: Bagaimana untuk melaksanakan pertanyaan lokasi geografi masa nyata dan menolak

Dengan perkembangan Internet, aplikasi maklumat lokasi geografi menjadi semakin meluas, seperti penghantaran masa nyata, tarikan berdekatan atau cadangan pedagang , dsb. Pada masa yang sama, membuat pertanyaan dan menolak lokasi geografi masa nyata juga menjadi cabaran yang dihadapi oleh pembangun. Dalam artikel ini, kami akan memperkenalkan cara menggunakan PHP dan REDIS untuk melaksanakan pertanyaan lokasi geografi masa nyata dan fungsi tolak.

Pertama, kita perlu memahami konsep asas dan penggunaan REDIS. REDIS ialah pangkalan data dalam memori yang menyokong pelbagai struktur data, seperti rentetan, senarai, jadual cincang, dsb. Kita boleh menggunakan Set Isih REDIS untuk melaksanakan fungsi penyimpanan dan pertanyaan lokasi geografi. Set tertib ialah koleksi rentetan tersusun Setiap rentetan dikaitkan dengan skor dan boleh diisih mengikut skor. Dalam aplikasi geolokasi, kita boleh menyimpan latitud dan longitud sebagai pecahan dan nama tempat sebagai rentetan dalam koleksi tersusun.

Berikut ialah contoh kod yang menunjukkan cara menggunakan REDIS untuk menyimpan maklumat geolokasi:

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

Dalam kod contoh di atas, kami mula-mula membuat sambungan REDIS, dan kemudian menggunakan perintah geoadd untuk menyimpan Beijing dan maklumat latitud dan longitud serta nama lokasi Shanghai. Seterusnya, gunakan perintah georadius untuk bertanya lokasi dalam jarak 200 kilometer dari lokasi semasa (longitud 116.407526, latitud 39.90403) dan gunakan pilihan WITHDIST untuk mengembalikan maklumat jarak. Akhir sekali, ulangi hasil pertanyaan dan cetak nama lokasi dan maklumat jarak. 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

Selain fungsi pertanyaan, kami juga boleh menggunakan fungsi terbitkan dan langgan (Pub/Sub) REDIS untuk mencapai lokasi geografi secara tepat masa. Katakan kami mempunyai aplikasi yang perlu menolak maklumat perniagaan berdekatan kepada pengguna dalam masa nyata Kami boleh menggunakan kod berikut untuk mencapai ini:

rrreee

Dalam kod di atas, kami menggunakan kaedah langgan untuk melanggan. ke nama saluran location_update dan tentukan fungsi panggil balik callback Apabila maklumat lokasi geografi dikemas kini, fungsi panggil balik akan dicetuskan. Dalam fungsi panggil balik, kami boleh menanyakan maklumat perniagaan berdekatan dalam masa nyata berdasarkan maklumat lokasi geografi dan menolak maklumat perniagaan ini kepada pengguna. 🎜🎜Melalui contoh kod di atas, kita dapat melihat bahawa sangat mudah dan cekap untuk menggunakan PHP dan REDIS untuk bertanya dan menolak lokasi geografi masa nyata. Sama ada dalam senario aplikasi seperti penghantaran masa nyata dan cadangan pedagang berdekatan, fungsi ini boleh membawa kemudahan dan peningkatan pengalaman yang hebat. Sudah tentu, contoh kod di atas hanyalah demonstrasi mudah, dan aplikasi sebenar memerlukan pembangunan dan pengoptimuman lanjut berdasarkan keperluan khusus Saya harap artikel ini akan membantu anda memahami dan menggunakan PHP dan REDIS untuk melaksanakan pertanyaan lokasi geografi masa nyata. dan tolak. 🎜

Atas ialah kandungan terperinci PHP dan REDIS: Bagaimana untuk melaksanakan pertanyaan lokasi geografi masa nyata dan tolak. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn