概念请参考w3school文章: redis watch ,redis exec (看完基本秒懂)
(1)基本事务:
//连接本地的 Redis 服务 $redis = new Redis(); $redis->connect('127.0.0.1', 6379); //开启事务 $redis->multi(); //操作key $redis->flushAll(); $redis->incr('user_id'); $redis->incr('user_id'); $redis->incr('user_id'); $ping = $redis->ping(); //执行事务 $result = $redis->exec(); if ($result) { echo '执行事务成功' . PHP_EOL; } else { echo '执行事务失败' . PHP_EOL; } //打印执行事务可以看到所有的执行结果 var_dump($result);
输出结果:
array(5) { [0]=> bool(true) [1]=> int(1) [2]=> int(2) [3]=> int(3) [4]=> string(5) "+PONG" }
(2).监视key执行事务(Watch 命令用于监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断)
<?php exec('chcp 65001'); //连接本地的 Redis 服务 $redis = new Redis(); $redis->connect('127.0.0.1', 6379); //清空redis $redis->flushAll(); //操作的redisKey $key = 'user_id'; //监视key $redis->watch($key); //开启事务 $redis->multi(); //睡眠点时间,手动开一个终端也去操作这个key sleep(60); //操作key $redis->incr($key); //执行事务 $result = $redis->exec(); if ($result) { echo '执行事务成功' . PHP_EOL; } else { echo '执行事务失败' . PHP_EOL; } //打印执行事务可以看到所有的执行结果 var_dump($result);
执行结果:
执行事务失败 bool(false)