利用swoole coroutine协程实现redis异步操作

<?php
#注意:如果不开启兼容模式,会遇到这样的现象,用swoole协程的方法访问常规方法添加到redis中的数据,可能访问不到
(直接返回NULL)!
这可能是两者采用了
不同的技术标准所致!

go(function (){
    $redis = new Swoole\Coroutine\Redis();
    $redis->connect('127.0.0.1', 6379);
    $val = $redis->set('陈培昌',json_encode(['age'=>21,'expertin'=>['泰拳','巴西柔术']]));#同样是hmset,常规方法第2个参数是混合类型
var_dump($val); }); go(function (){ $redis = new Swoole\Coroutine\Redis(); 
$redis
->connect('127.0.0.1', 6379);
$val
= $redis->get('陈培昌');
var_dump(json_decode($val)); });

打印结果:

object(stdClass)#8 (2) {
["age"]=>
int(21)
["expertin"]=>
array(2) {
[0]=>
string(6) "泰拳"
[1]=>
string(12) "巴西柔术"
}
}
bool(true)

 

#常规方法

/*把货单项目名称键名加载到redis*/

$li = new mysqli('localhost','root','wenwajiao','taizhouwu');
$sql = "select title,colname from columninfo";
$stmt=$li->query($sql);
$liaogaximaxida = $stmt->fetch_all();
$redis = new Redis();
$redis->connect('127.0.0.1',6379);
for ($i=0;$i<count($liaogaximaxida);$i++)
{
    $saiwa = $liaogaximaxida[$i];
    $redis->hMSet($saiwa[0],['mykey'=>$saiwa[1]]);#同样是hmset,常规方法第2个参数是数组类型
}
;

 #开启兼容模式-----swoole4.4版本可用!

哟比~其实文档早就有了,我没仔细看,这个浮躁,功利的时代,唉~,再次感谢韩天峰先生
go(function (){ $myredis
= new Swoole\Coroutine\Redis(); $myredis->connect('127.0.0.1',6379); $myredis->setOptions(['compatibility_mode' => true]);#重要,开启后,支持协程中使用php redis操作
   #所谓php redis操作就是我们耳熟能详的hmGet/hGetAll/zRange/zRevRange/zRangeByScore/zRevRangeByScore各类方法     $myredis
->hmset('testkey3',['name'=>'劲儿弟弟','age'=>20]); var_dump($myredis->hgetall('testkey3')); });

 

posted @ 2019-07-08 01:36  saintdingtheGreat  阅读(1542)  评论(0编辑  收藏  举报