Redis事务管理

目录

  • 一,关系型数据库(sqlserver、mysql、oracle)的事务隔离机制说明
  • 二,redis事务机制
  • 三,示例
    • 3.1,示例一 这个例子中没有出现异常,所以所有的命令都成功了
    • 3.2,这个例子中,在事务开启后,有一个命令执行出错了,那么所有的命令都不会执行
    • 3.3,这个例子中出现了两个事务,两个事务都表示自己执行成功了,但是有一个发现值并不是自己设置的,被别人覆盖了
    • 3.4,加上Watch age后,再来执行事务。

一,关系型数据库(sqlserver、mysql、oracle)的事务隔离机制说明

下面是设置MySQL数据库的事务隔离机制的sql语句:
set global transaction isolation level read uncommitted;
将全局事务隔离级别设置为未提交读取;

下面是事务隔离的几个机制:

1、read uncommitted(读取未提交的数据)
缺点:如果数据最终rollback了,那么读取的数据就错了
2、read committed(读取已经提交的数据)
缺点:如果在一个事务中,对通过一个数据进行了多次的读取。在多次读取的过程中,有人
提交了数据。那么多次读取的数据结果就会出现不一致。
3、repeatable read(重复读)
缺点:会出现幻读。
4、serializable(串行)
缺点:太慢

二,redis事务机制

1、 MULTI 与 EXEC命令

以 MULTI 开始一个事务,然后将多个命令入队到事务中, 最后由 EXEC 命令触发事务,
一并执行事务中的所有命令

2、 DISCARD命令
DISCARD 命令用于取消一个事务, 它清空客户端的整个事务队列, 然后将客户端从事
务状态调整回非事务状态, 最后返回字符串 OK 给客户端, 说明事务已被取消。
乐观锁:一个版本控制 update table set age=13 where v=1
悲观锁:
3、WATCH命令(类似乐观锁)
WATCH 命令用于在事务开始之前监视任意数量的键: 当调用 EXEC 命令执行事务时,
如果任意一个被监视的键已经被其他客户端修改了, 那么整个事务不再执行, 直接返回失败。

三,示例

3.1,示例一 这个例子中没有出现异常,所以所有的命令都成功了

Redis事务管理_第1张图片

3.2,这个例子中,在事务开启后,有一个命令执行出错了,那么所有的命令都不会执行

Redis事务管理_第2张图片

3.3,这个例子中出现了两个事务,两个事务都表示自己执行成功了,但是有一个发现值并不是自己设置的,被别人覆盖了

Redis事务管理_第3张图片

3.4,加上Watch age后,再来执行事务。

左边的再开启事务之后,exec执行之前,右边有另外一个事务对age进行了修改。那么左边的事务将执行失败

Redis事务管理_第4张图片

你可能感兴趣的:(redis,数据库,缓存)