Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah PHP melaksanakan pemantauan berterusan langganan mesej Redis dan memproses mata keahlian?

Bagaimanakah PHP melaksanakan pemantauan berterusan langganan mesej Redis dan memproses mata keahlian?

WBOY
WBOYasal
2023-09-05 18:39:141334semak imbas

Bagaimanakah PHP melaksanakan pemantauan berterusan langganan mesej Redis dan memproses mata keahlian?

Bagaimanakah PHP melaksanakan pemantauan berterusan langganan mesej Redis dan memproses mata ahli?

Pengenalan

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.

Preparation

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.

Buat Projek

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_idpoints两个字段,以及一个type字段用于标识消息类型。根据不同的消息类型,调用相应的处理函数。

在处理函数中,我们对相应用户的积分进行相应的增加或扣除操作。这里只是简单地打印了一条消息,实际应用中可以根据需求进行相应的业务逻辑处理。

启动监听

现在,我们可以启动Redis消息监听,来处理会员积分的变动了。在命令行中执行以下命令:

php index.php

此时,PHP脚本会进入监听状态,实时等待Redis中的消息。

发送消息

在另外一个终端中,我们可以使用Redis的PUBLISH

Kemudian, kita perlu memasang perpustakaan klien Redis, di sini kita memilih untuk menggunakan perpustakaan predis/predis.

redis-cli PUBLISH member-points '{"type":"add_points","user_id":123,"points":100}'

Selepas pemasangan selesai, Komposer akan menjana folder 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 melalui memerlukan '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!

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