Bagaimanakah PHP melaksanakan pemantauan berterusan langganan mesej Redis dan memproses mata ahli?
Redis ialah sistem storan nilai kunci berprestasi tinggi yang sering digunakan sebagai pelaksanaan baris gilir mesej. Semasa pembangunan, kami sering menghadapi senario yang memerlukan pemprosesan masa nyata mesej, seperti memproses perubahan dalam mata keahlian. Artikel ini akan memperkenalkan cara menggunakan PHP untuk memantau langganan mesej Redis secara berterusan dan mengendalikan perubahan dalam mata ahli.
Sebelum kita mula, kita perlu memasang sambungan Redis dan memasang alat Komposer.
Pertama, pastikan anda telah memasang sambungan Redis. Anda boleh menyemaknya dengan arahan berikut:
php -m | grep redis
Jika anda melihat "redis" dalam output, ini bermakna sambungan Redis telah dipasang. Jika ia tidak dipasang, sila pasang sambungan Redis yang sepadan mengikut sistem pengendalian dan versi PHP anda.
Seterusnya, kita perlu memasang alat Komposer. Sila lawati [https://getcomposer.org/](https://getcomposer.org/) dan ikuti panduan rasmi untuk memasangnya.
Mula-mula, buat folder baharu dalam baris arahan, dan kemudian pergi ke dalam folder.
mkdir redis-subscribe cd redis-subscribe
Seterusnya, gunakan Komposer untuk memulakan projek PHP baharu.
composer init
Ikuti gesaan dan masukkan nama projek, penerangan dan maklumat lain. Selepas selesai, fail composer.json
akan dijana dalam folder semasa. composer.json
文件。
然后,我们需要安装一个Redis客户端库,这里我们选择使用predis/predis
库。
composer require predis/predis
安装完成后,Composer会在当前文件夹下生成一个vendor
文件夹,其中包含了所需的依赖库。
接下来,创建一个新的PHP文件index.php
,用于编写Redis消息订阅和积分处理的代码。
<?php require 'vendor/autoload.php'; use PredisClient; $redis = new Client(); $redis->subscribe(['member-points'], function ($redis, $channel, $message) { // 处理消息 $data = json_decode($message, true); // 根据消息类型处理积分 if ($data['type'] === 'add_points') { addPoints($data['user_id'], $data['points']); } elseif ($data['type'] === 'deduct_points') { deductPoints($data['user_id'], $data['points']); } }); function addPoints($userId, $points) { // 处理增加积分逻辑 echo "增加{$points}积分给用户{$userId}" . PHP_EOL; } function deductPoints($userId, $points) { // 处理扣除积分逻辑 echo "扣除{$points}积分给用户{$userId}" . PHP_EOL; }
以上代码通过require 'vendor/autoload.php';
引入了Composer生成的自动加载器。然后,创建了一个Redis客户端实例$redis
,使用$redis->subscribe()
方法进行消息的订阅和处理。
在$redis->subscribe()
方法中,我们使用了匿名函数作为参数,并在函数体中执行了处理消息的逻辑。这里我们假设消息的结构是一个JSON字符串,包含了user_id
和points
两个字段,以及一个type
字段用于标识消息类型。根据不同的消息类型,调用相应的处理函数。
在处理函数中,我们对相应用户的积分进行相应的增加或扣除操作。这里只是简单地打印了一条消息,实际应用中可以根据需求进行相应的业务逻辑处理。
现在,我们可以启动Redis消息监听,来处理会员积分的变动了。在命令行中执行以下命令:
php index.php
此时,PHP脚本会进入监听状态,实时等待Redis中的消息。
在另外一个终端中,我们可以使用Redis的PUBLISH
predis/predis
. redis-cli PUBLISH member-points '{"type":"add_points","user_id":123,"points":100}'
vendor
di bawah folder semasa, yang mengandungi perpustakaan bergantung yang diperlukan. Seterusnya, buat fail PHP baharu index.php
untuk menulis kod bagi langganan mesej Redis dan pemprosesan mata. rrreee
Kod di atas memperkenalkan pemuat auto yang dijana oleh Komposer melaluimemerlukan 'vendor/autoload.php';
. Kemudian, contoh klien Redis $redis
dibuat dan kaedah $redis->subscribe()
digunakan untuk melanggan dan memproses mesej. Dalam kaedah $redis->subscribe()
, kami menggunakan fungsi tanpa nama sebagai parameter dan melaksanakan logik pemprosesan mesej dalam badan fungsi. Di sini kami menganggap bahawa struktur mesej ialah rentetan JSON, termasuk dua medan: user_id
dan points
dan medan type
untuk mengenal pasti jenis mesej. Mengikut jenis mesej yang berbeza, fungsi pemprosesan yang sepadan dipanggil. #🎜🎜##🎜🎜#Dalam fungsi pemprosesan, kami menambah atau menolak mata pengguna yang sepadan dengan sewajarnya. Di sini, mesej hanya dicetak Dalam aplikasi sebenar, pemprosesan logik perniagaan yang sepadan boleh dilakukan mengikut keperluan. #🎜🎜##🎜🎜#Mulakan pemantauan#🎜🎜##🎜🎜#Kini, kita boleh memulakan pemantauan mesej Redis untuk mengendalikan perubahan dalam mata ahli. Jalankan arahan berikut dalam baris arahan: #🎜🎜#rrreee#🎜🎜#Pada masa ini, skrip PHP akan memasuki keadaan mendengar dan menunggu mesej dalam Redis dalam masa nyata. #🎜🎜##🎜🎜#Hantar mesej#🎜🎜##🎜🎜#Di terminal lain, kita boleh menggunakan perintah PUBLISH
Redis untuk menerbitkan mesej tentang perubahan dalam mata ahli. Sebagai contoh, kita boleh menggunakan arahan berikut untuk menghantar mesej untuk meningkatkan mata: #🎜🎜#rrreee#🎜🎜# Kemudian, anda akan melihat hasil pemprosesan yang sepadan dalam output skrip PHP. #🎜🎜##🎜🎜#Ringkasan#🎜🎜##🎜🎜#Melalui langkah di atas, kami berjaya merealisasikan pemantauan berterusan langganan mesej Redis dalam PHP, dan memproses perubahan dalam mata ahli berdasarkan pelbagai jenis mesej. Mekanisme langganan dan pemprosesan mesej berasaskan Redis ini boleh digunakan secara fleksibel dalam pelbagai senario pemprosesan mesej masa nyata. #🎜🎜##🎜🎜# Saya harap artikel ini akan membantu anda memahami cara menggunakan PHP untuk melaksanakan langganan mesej Redis dan mengendalikan mata keahlian. Jika anda mempunyai sebarang soalan atau cadangan, sila tinggalkan mesej untuk perbincangan. #🎜🎜#Atas ialah kandungan terperinci Bagaimanakah PHP melaksanakan pemantauan berterusan langganan mesej Redis dan memproses mata keahlian?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!