事务
MULTI .... EXEC
redis> MULTI
OK
redis> SET key1 2
QUEUED
redis> SET key2 3
QUEUED
redis> EXEC
1) (integer) 1
2) (integer) 2
WATCH
redis> SET key 1
OK
redis>WATCH key
OK
redis>MULTI
OK
redis> SET key 3
QUEUED
redis> EXEC
(nil)
redis> GET key
"2"
监听键后其他客户端将无法修改键值
当执行EXEC后,会取消对所有键的监控,才开始执行SET
所以在MULTI ... EXEC中key的操作是会被执行的
不执行事务也可以通过- UNWATCH来取消
(在PHP laravel5.2下 use Redis )
public function incrop($key)
{
if(Redis::exists($key)){
Redis::watch($key);
$v1 = Redis::get($key);
$temp = $v1+1;
Redis::multi();
$v2 = Redis::set($key,$temp);
$list = Redis::exec();
echo Redis::get($key)."<br>";
echo $v2."<br>";
dump($list);
}else{
echo "key is not exist!";
}
}
运行结果:
3
QUEUED
array:1 [▼
0 => Status {#171 ▼
-payload: "OK"
}
]