美文网首页
Redis事务

Redis事务

作者: 一如既往wfqwfq | 来源:发表于2019-10-28 11:50 被阅读0次

1、Redis事务机制

严格意义来讲,Redis的事务和我们理解的传统数据库(如mysql)的事务是不一样的。Redis的事务实质上是命令的集合,在一个事务中要么所有命令都被执行,要么所有事务都不执行。(不关心执行结果)
Redis事务三个阶段:

  • 开始事务
  • 命令入队
  • 执行事务

从下图中可以看出,当开启事务后,所要执行的命令并不是马上执行,而是放入队列中,等事务提交后批量执行。

image.png
注意:
  • redis并没有事务回滚的机制,开发者需要在命令执行失败后自行处理。
  • 如果redis事务中命令出错,那么所有命令都不会被执行。
  • 如果redis事务中命令运行时出错,那么其他正确的命令正常执行。
    监控机制:
    Redis事务启用的是乐观锁机制,通过WATCH命令来监控一个或多个key。如果被监测的key没有被改变,则事务正常执行。如果被监测的key被改变,则事务不执行。

2、Redis事务命令

image.png

3、实例

1.执行成功

redis开启事务后,执行的命令并不是马上被执行,而是做入队操作,提交事务后才批量执行命令。


image.png

2.执行失败

执行一个错误命令,则事务中所有命令都不执行。

image.png

3.执行成功,但是结果失败

set k1、k2、k3都执行成功了,但是执行incr k2的时候因为k2是字符串无法做自增操作,所以incr k2失败。可以得出结论redis事务不保证原子性,只要命令(incr)对了,事务就会执行,不管执行结果是否成功。


image.png

4.WATCH测试

设置k1,并对k1监控。事务等终端2对k1修改后提交


image.png

修改k1的值


image.png
k1被终端2给修改了,终端1的事务无法执行。

4、总结

1、Redis事务采用的是队列缓存和批量处理的机制,事务中命令并不马上执行,先入队,等事务提交后一起执行。
2、Redis事务关心的是事务中命令是否被执行,而不关心命令执行后结果是否正确成功。
3、不考虑外界因素情况下,Redis事务中命令是否执行可以结合java的异常机制来理解。命令错误,则全部不执行。(类比java强制性异常)命令正确,但是执行失败,其他正确命令正常执行。(运行时异常)

相关文章

  • 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/ojivvctx.html