Redis 事务
Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证:
- 批量操作在发送 EXEC 命令前被放入队列缓存。
- 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。
- 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。
一个事务从开始到执行会经历以下三个阶段:
- 监听命令 watch(key),不是必须的
- 开始事务 multi(),开启事务
- 命令入队,业务数据操作
- 检测服务器 ping() ,检测服务器连接是否正常
- 执行事务,exec(),执行事务
PHP 中 Redis 事务的应用
$redis = new redis(); // 创建redis对象 $redis -> connect('127.0.0.1',6379);// 连接redis 数据库 $redis -> watch('number'); // 监听key是number,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断,可以监视一个(或多个) key $redis -> multi(); // 开始事务块 $redis -> set('favorite_fruit','cherry'); //设置其他值 $redis -> incrBy('number',3); // 更新监听的数据 $redis -> get('favorite_fruit'); // 获取值 $redis -> ping(); // 测试与服务器的连接是否仍然生效,或者用于测量延迟值,如果连接正常就返回一个 PONG ,否则返回一个连接错误。 不是事务必须的命令 var_dump($redis -> exec()); // 执行事务 //array (size=4) // 0 => boolean true // 1 => int 3 // 2 => string 'cherry' (length=6) // 3 => string '+PONG' (length=5) $redis -> discard(); // 取消事务,取消 watch 命令对所有 key 的监视。 var_dump($redis -> exec()); // null