swoole学习之异步Redis

官方文档 : 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指令

设置了passworddatabase选项后,连接就绪后底层会自动发送相关指令
等待服务器响应成功后才会触发onConnect连接成功事件
如果passworddatabase错误,onConnect连接结果为失败
Redis服务端设置了密码.而你在__contruct()中没设置密码的话,connect的连接结果仍是true,但后续操作会失败

connect($host,$port,$callback)连接Redis

$host redis服务的主机地址
$portredis服务的端口
$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命令后,只能执行subscribepsubscribeunsubscribepunsubscribe这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');
});
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值