官方文档 : https://wiki.swoole.com/wiki/page/p-redis.html
-
在使用异步Redis之前.保证你可以正常连接到一个redis服务
-
安装hiredis并且开启异步Redis客户端
以上准备工作在官方文档都有介绍
在重新编译安装swoole后,使用
php --ri swoole
看到async redis client
或者redis_client
代表异步redis客户端安装成功
<?php
$option = [
'password' => 'mr666...'
];
$redis = new swoole_redis($option);
$redis->on('message',function (){
});
$redis->on('close',function (){
});
$redis->connect('127.0.0.1','6379',function ($redis,$result){
if($result === false){
var_dump($redis->errCode,$redis->errMsg);
die;
}
var_dump($result);
$redis->set('marun',time(),function ($redis,$result){
var_dump($result);
});
$redis->keys("*",function ($redis,$result){
var_dump($result);
});
$redis->close();
});
echo "start".PHP_EOL;
函数:
__construct($options)
构造方法
$options
默认为null
可设置:
$options['timeout'] = 1.5
浮点型,最小粒度为1毫秒,Connect
后,在规定的时间内服务器没有完成握手,底层将自动关闭socket
,设置连接为失败,触发onConnect
事件$options['password'] = 'passwd'
必须为字符串类型,可以设置Redis服务器密码,等同于auth
指令$options['database'] = 0;
整型,设置使用的Redis服务器的数据库编号,等同于select
指令
设置了
password
或database
选项后,连接就绪后底层会自动发送相关指令
等待服务器响应成功后才会触发onConnect
连接成功事件
如果password
或database
错误,onConnec
t连接结果为失败
在Redis
服务端设置了密码.而你在__contruct()
中没设置密码的话,connect
的连接结果仍是true
,但后续操作会失败
connect($host,$port,$callback)
连接Redis
$host
redis服务的主机地址
$port
redis服务的端口
$callback
回调函数, function($redis , $result)
$redis
redis连接对象$result
连接成功为true
, 连接失败为false
,可通过$redis->errCode
获取错误码,$redis->errMsg
获得错误信息
连接成功之后就可以使用redis操作了 redis操作可以查看: http://doc.redisfans.com/index.html
on($eventname ,$callback)
回调函数
目前仅支持两种回调函数,并且回调函数必须在connect
之前调用
on('close',function($redis))
redis连接关闭时自动调用on('message',function($redis, $message))
当客户端收到来自服务器的订阅消息时自动触发
close()
关闭Redis连接
__call($command,$param)
魔术方法,会映射Redis指令,参数作为Redis指令的参数
$command
必须是Redis中合法的指令
$param
的最后一个参数必须是可执行的函数,其他参数均为字符串
example:
$redis->set('name','marun',function ($redis,$result){
var_dump($result);
});
订阅/发布消息
Redis服务器除了作为内存存储之外,还可以作为一个消息通道服务器。SwooleRedis
客户端也支持了Redis
的订阅/发布消息指令。
与普通的存储指令不同,消息订阅/发布指令不是请求响应式的。
- 订阅/发布指令没有回调函数,不需要在最后一个参数传入callback
- 使用订阅/发布消息命名,必须设置onMessage事件回调函数
- 客户端发出了subscribe命令后,只能执行
subscribe
,psubscribe
,unsubscribe
,punsubscribe
这4条命令
$client = new swoole_redis;
$client->on('message', function (swoole_redis $client, $result) {
var_dump($result);
static $more = false;
if (!$more and $result[0] == 'message')
{
echo "subscribe new channel\n";
$client->subscribe('msg_1', 'msg_2');
$client->unsubscribe('msg_0');
$more = true;
}
});
$client->connect('127.0.0.1', 6379, function (swoole_redis $client, $result) {
echo "connect\n";
$client->subscribe('msg_0');
});