/**
* @param $data
* @throws Exception
*/
public function redisMultiPipeline($data)
{
//實例化redis
$redis = new Redis();
//連接
$redis->connect(Configure::read('redis.cache.host'), Configure::read('redis.cache.port'));
if (!is_null(Configure::read('redis.cache.password'))) {
$redis->auth(Configure::read('redis.cache.password'));
}
$redis->select(Configure::read('redis.cache.database'));
$redis->pipeline(); //開啓管道
if (!$redis) {
throw new Exception('redis連接失敗!', 1);
}
$redis->setOption(Redis::OPT_PREFIX, 'CPU_TASK:'); //管道數據批量設置前綴
foreach ($data as $key => $datum) {
$redis->set($key, $datum); //循環set值,都將被塞進管道中
}
$redis->exec(); //客戶端提交數據到Redis處理,1次網絡耗時加n次命令耗時
$redis->close();
}
//註釋:如果不開啓管道,循環set redis數據,那麼是n次網絡耗時加n次命令耗時,這樣網絡耗時就增加了。