Redis 事务

作者: mashen | 来源:发表于2017-10-12 14:15 被阅读0次

事务
用来保证程序原子性的一系列操作
当开启事务后redis会将所有操作记录单不执行
当执行exec时 将之前记录的操作一并执行
redis事务只能保证操作的原子性 但不支持数据回滚
下面例子基于 redis 3.2.10 低于此版本可能会略有不同

// 连接redis
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);

// 开启事务
$multi = $redis->multi();

if($multi){

    $redis->set('aaa',100);
    $redis->set('bbb',200);

    // 提交事务
    $exec = $redis->exec();

    // 返回一个数组 : Array ( [0] => 1 [1] => 1 )
    // 数组的第一个值为第一个操作 set('aaa',100) 的执行结果 成功为 1  以此类推
    print_r($exec);
}

上面例子会一致性执行 set('aaa',100); 和 set('bbb',200);
如果多个操作中有语法或书写错误 则exec时会全都不执行

$multi = $redis->multi();

    $redis->set('aaa',100);
    $redis->set22('bbb',200);
    $redis->lPush('aaa',2000);

$redis->exec();

# 上面3项操作会全都不执行

那么有一种情况 当事务在执行的过程中 其他客户端又来操作事务中涉及到的值
那么这样就很容易出现数据错乱或脏读的问题
redis 提供了 watch 来监听一个或多个键 如果在事务提交前所监听的键被改变则exec失败

// 连接redis
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);

// 监听一个或多个键
$res = $redis->watch(array('aaa','bbb'));

// 开启事务
if($res){

    // 开启事务
    $multi = $redis->multi();

    if($multi){

        $redis->set('aaa',1000);
        $redis->set('bbb',2000);

        // 提交事务
        $exec = $redis->exec();

        // 返回一个数组 : Array ( [0] => 1 [1] => 1 )
        // 数组的第一个值为第一个操作 set('aaa',100) 的执行结果 成功为 1  以此类推
        print_r($exec);
    }
}

# 在watch之后 exec之前 其他客户端改变所监听的键的值时( 读取不改变值则不会出发 ) 则当前事务exec则会失败

相关文章

  • redis系列(十):事务

    redis有事务么? redis官方说是有事务的。但这个事务不是我们普遍理解的mysql事务。 redis的事务不...

  • 九、Redis 事务

    Redis 事务 Redis事务描述: Redis事务允许在单个步骤中执行一组命令。以下是Redis事务的两个属性...

  • Redis事务

    redis事务机制 Redis事务与传统关系型事务的比较

  • Redis事务

    转载自Redis之Redis事务 Redis事务的概念: Redis 事务的本质是一组命令的集合。事务支持一次执行...

  • redis中的事物、消息订阅、持久化

    Redis 中的事务 Redis支持简单的事务 Redis与 mysql事务的对比 注: rollback与dis...

  • Redis简单操作记录

    Redis事务 1.Redis事务本质:一组命令的集合,加入队列,然后执行,执行完事务结束。 redis事务: ①...

  • JavaGuide知识点整理——Redis面试题总结(下)

    Redis事务 如何使用Redis事务? Redis可以通过multi,exec,discard和watch等命令...

  • redis 常用指令

    Redis 的事务 Redis 的事务处理与 RDBMS 的事务有一些不同。首先 Redis 不支持事务的回滚机制...

  • Redis学习笔记:事务

    Redis学习笔记:事务 原文链接:Redis学习笔记:事务 一、事务的描述 和MySQL一样,Redis中也有事...

  • 事务

    简介 MULTI、EXEC、DISCARD、WATCH是redis事务的基础。事务特征如下: redis事务允许将...

网友评论

    本文标题:Redis 事务

    本文链接:https://www.haomeiwen.com/subject/veonyxtx.html