2,779   Redis

一,概念

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

Your email address will not be published. Required fields are marked *