一,概念
1,阻塞,Redis去拿数据,假如不存在或者没有,则一直处于等待状态,直到超时或者有数据为止;
语法:
//$key 为读取的键名,$timeout为阻塞超时时间,如果是0则一直阻塞 $redis->blPop($key,$timeout); $redis->brPop($key,$timeout); //多个键名,哪个先有数据读哪个,优先选中左边的 $redis->blPop($key1,$key2,$key3,$timeout); $redis->brPop($key1,$key2,$key3,$timeout);
2,非阻塞,Redis去读数据,有则返回数据,没有则直接nil,然后执行下面的操作,不会等待数据的来临;
语法:
//$key 为读取的键名,没有数据则放回nil $redis->lPop($key); $redis->rPop($key);
二,测试:阻塞
1,测试代码:
// 阻塞读取数据 echo date('Y-m-d H:i:s').' 开始读取数据',"\n"; echo date('Y-m-d H:i:s').' 使用阻塞语句:blPop,设定超时:10秒',"\n"; $result = $redis->blPop('test_result',10); echo date('Y-m-d H:i:s').' 读取完毕,结果为:',"\n"; var_dump($result); // 插入测试数据 $redis->delete('test_result'); echo date('Y-m-d H:i:s').' 插入数据',"\n"; $result = $redis->lPush('test_result', 'result_'.date('Y-m-d H:i:s')); echo date('Y-m-d H:i:s').' 插入完毕,结果为:',"\n"; var_dump($result);
2,测试情况:等待至超时,等待10秒后依然没数据,超时跳过
chenyunhui@ubuntu:/mnt/hgfs/ShareFolder/web/click$ php queue.php 2015-05-03 09:53:13 开始读取数据 2015-05-03 09:53:13 使用阻塞语句:blPop,设定超时:10秒 2015-05-03 09:53:23 读取完毕,结果为: array(0) { }
3,测试情况:等待至有数据,等待2秒后,有数据插入了,马上读取
// 插入测试数据 chenyunhui@ubuntu:/mnt/hgfs/ShareFolder/web/click$ php test.php 2015-05-03 09:57:44 插入数据 2015-05-03 09:57:44 插入完毕,结果为: int(1) // 阻塞读取数据 chenyunhui@ubuntu:/mnt/hgfs/ShareFolder/web/click$ php queue.php 2015-05-03 09:57:42 开始读取数据 2015-05-03 09:57:42 使用阻塞语句:blPop,设定超时:10秒 2015-05-03 09:57:44 读取完毕,结果为: array(2) { [0]=> string(11) "test_result" [1]=> string(26) "result_2015-05-03 09:57:44" }
三,测试:非阻塞
1,测试代码:
// 非阻塞读取数据 $redis->delete('test_result'); echo date('Y-m-d H:i:s').' 插入数据',"\n"; $result = $redis->lPush('test_result', 'result_'.date('Y-m-d H:i:s')); echo date('Y-m-d H:i:s').' 插入完毕,结果为:',"\n"; var_dump($result); // 插入测试数据 $redis->delete('test_result'); echo date('Y-m-d H:i:s').' 插入数据',"\n"; $result = $redis->lPush('test_result', 'result_'.date('Y-m-d H:i:s')); echo date('Y-m-d H:i:s').' 插入完毕,结果为:',"\n"; var_dump($result);
2,测试情况:没有数据
chenyunhui@ubuntu:/mnt/hgfs/ShareFolder/web/click$ php queue.php 2015-05-03 10:12:46 开始读取数据 2015-05-03 10:12:46 使用非阻塞语句:lPop 2015-05-03 10:12:46 读取完毕,结果为: bool(false)
3,测试情况:有数据
// 插入测试数据 chenyunhui@ubuntu:/mnt/hgfs/ShareFolder/web/click$ php test.php 2015-05-03 10:13:07 插入数据 2015-05-03 10:13:07 插入完毕,结果为: int(1) chenyunhui@ubuntu:/mnt/hgfs/ShareFolder/web/click$ // 非阻塞读取数据 chenyunhui@ubuntu:/mnt/hgfs/ShareFolder/web/click$ php queue.php 2015-05-03 10:13:09 开始读取数据 2015-05-03 10:13:09 使用非阻塞语句:lPop 2015-05-03 10:13:09 读取完毕,结果为: string(26) "result_2015-05-03 10:13:07"
Leave a Reply