文章目录
- 前言
- 一、Redis订阅发布是什么?
- 二、使用步骤
- 1.安装Redis
- 2.使用
- 总结
前言
前段时间有一个需求是这样的,公司有一个视频资源网站,同时拥有一个需要该视频资源的客户端,用户通过网站购买加密视频资源,在客户端使用。因为是加密视频,用户使用时需要获取解密秘钥,解密秘钥是用户在网站购买之后才能够获取。但是用户登陆客户端时,只有在登陆时才能够获取一次所有秘钥,中途购买无法获取秘钥信息。所以考虑了一下决定使用Redis订阅发布功能来主动通知客户端。
一、Redis订阅发布是什么?
所谓发布订阅,就是消息发布者发布消息及消息订阅者接收消息,二者通过某种媒介关联起来。这类似以前的『订报』,当我们订阅了某种报纸后(比如财经报),每当报纸有新的期刊出版后,就会有邮递员给我们送过来。即,只有定了这种报纸才会收到出版社发布的这种新报纸。
二、使用步骤
1.安装Redis
2.使用
代码如下(示例):
/**
* Redis 发布
* @param $user_id int 用户iD
* @param $source_id int 资源id
* @return bool
*/
function redis_publish($user_id, $source_id)
{
$redis = new \Redis();
$redis->connect('127.0.0.1', 6379);
$redis->auth('redis密码'); //密码验证 //redis密码
//查询用户账号,用作频道 通知对应用户
$user_info = M('user')->where(['id' => $user_id])->field('phone,email')->find();
//查询资源对应的秘钥和标识
$source_info = M('source')->where(['id' => $source_id])->field('source_pwd,source_flag')->find();
//组合发布参数
$data = ['source_flag' => $source_info['source_flag']];
if ($user_info['phone']) {
$channel_name = $user_info['phone'];
$redis->publish($channel_name, json_encode($data));
}
if ($user_info['email']) {
$channel_name = $user_info['email'];
$redis->publish($channel_name, json_encode($data));
}
return true;
}
这里是根据用户的手机号或者邮箱作为唯一频道进行发布消息的。
//使用redis 发布订阅
redis_publish($uid, $source_id);
关于订阅,因为客户端是使用C语言进行开发的,这里使用PHP作为一个演示案例供大家参考
<?php
//设置php脚本执行时间
set_time_limit(0);
//设置socket连接超时时间
ini_set('default_socket_timeout', -1);
//声明测试频道名称
$channelName = "testPubSub";
$channelName2 = "testPubSub2";
try {
$redis = new \Redis();
//建立一个长链接
$redis->pconnect('127.0.0.1', 6379);
//阻塞获取消息
$redis->subscribe(array($channelName, $channelName2), function ($redis, $chan, $msg) {
echo "channel:".$chan.",message:".$msg."\n";
});
} catch (Exception $e) {
echo $e->getMessage();
}
总结
本文仅仅简单介绍了本人在第一次使用Redis的过程,而Redis的使用远远不限于此。此文仅供参考,欢迎大家指正。