利用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')); });