请教大家一个问题:上下文:
a 使用的redis扩展,源码包来自:https://github.com/phpredis/phpredis
b redis扩展的版本 : 2.2.5;
c php的版本:5.6.9.问题是这样的:
我运行如下代码:
$redis = new Redis();
$redis->connect('127.0.0.1');$pipeline = $redis->multi(true);echo PHP_EOL, 'redis object:', PHP_EOL;
var_dump($redis);ECHO PHP_EOL, 'pipeline object : ', PHP_EOL;
var_dump($pipeline);echo PHP_EOL, '$redis->zRange() 的结果 : ', PHP_EOL;
print_r($redis->zRange('idx:z:king', 0, -1, true));echo PHP_EOL, '$redis->exec() 的结果 : ', PHP_EOL;
print_r($redis->exec());echo PHP_EOL, '$redis->zRange() 的结果 : ', PHP_EOL;
print_r($redis->zRange('idx:z:king', 0, -1, true));返回的结果为:redis object:
object(Redis)#1 (1) {
["socket"]=>
resource(3) of type (Redis Socket Buffer)
}pipeline object :
object(Redis)#1 (1) {
["socket"]=>
resource(3) of type (Redis Socket Buffer)
}$redis->zRange() 的结果 :
Redis Object
(
[socket] => Resource id #3
)$redis->exec() 的结果 :
Array
(
[0] => Array
(
[20170206] => 0
[2017020701] => 0
))$redis->zRange() 的结果 :
Array
(
[20170206] => 0
[2017020701] => 0
)根据上述结果,我的理解是:调用$redis->multi(true)之后,
1、上述的‘$redis’和‘$pipeline’为同一个对象;
2、即进入事务模式,$redis同$pipeline,直到执行exec()方法后,才能结束事务模式,$redis即可正常使用。大家有遇到这种情况吗?怎么理解这种情况的呢?
a 使用的redis扩展,源码包来自:https://github.com/phpredis/phpredis
b redis扩展的版本 : 2.2.5;
c php的版本:5.6.9.问题是这样的:
我运行如下代码:
$redis = new Redis();
$redis->connect('127.0.0.1');$pipeline = $redis->multi(true);echo PHP_EOL, 'redis object:', PHP_EOL;
var_dump($redis);ECHO PHP_EOL, 'pipeline object : ', PHP_EOL;
var_dump($pipeline);echo PHP_EOL, '$redis->zRange() 的结果 : ', PHP_EOL;
print_r($redis->zRange('idx:z:king', 0, -1, true));echo PHP_EOL, '$redis->exec() 的结果 : ', PHP_EOL;
print_r($redis->exec());echo PHP_EOL, '$redis->zRange() 的结果 : ', PHP_EOL;
print_r($redis->zRange('idx:z:king', 0, -1, true));返回的结果为:redis object:
object(Redis)#1 (1) {
["socket"]=>
resource(3) of type (Redis Socket Buffer)
}pipeline object :
object(Redis)#1 (1) {
["socket"]=>
resource(3) of type (Redis Socket Buffer)
}$redis->zRange() 的结果 :
Redis Object
(
[socket] => Resource id #3
)$redis->exec() 的结果 :
Array
(
[0] => Array
(
[20170206] => 0
[2017020701] => 0
))$redis->zRange() 的结果 :
Array
(
[20170206] => 0
[2017020701] => 0
)根据上述结果,我的理解是:调用$redis->multi(true)之后,
1、上述的‘$redis’和‘$pipeline’为同一个对象;
2、即进入事务模式,$redis同$pipeline,直到执行exec()方法后,才能结束事务模式,$redis即可正常使用。大家有遇到这种情况吗?怎么理解这种情况的呢?
然后用户可以执行多条指令,redis不会马上执行这些指令,还只是放入到队列中。
当执行exec指令时,所有的指令执行。