Redis03_事务

概述

Redis事务的作用: 就是串联多个命令防止别的命令插队。

事务之间的关系:

主要分为两种模式: 组队中和执行

先来看一下命令:
mulit: 发起组队, 将进行的操作写入到事务中
exec: 执行事务
discard:终止事务的执行
在这里插入图片描述
事务的错误的两种情况:

  1. 组队中遇到错误, 全部都会执行失败
  2. 执行中遇到错误, 其他的继续执行, 错误的就失败
    图解情况:
    在这里插入图片描述

为什么要有事务呢?

答: 为了防止多个客户端对同一条数据作处理, 导致数据紊乱的问题

事务冲突的问题怎么解决呢?

解决的两种方式:

  • 悲观锁: 对操作的数据,每次操作前都加上锁, 操作完之后,再释放, 缺点: 影响数据的读写效率
  • 乐观锁: 对操作的数据加上版本号, 操作完之后就更改版本号,如果你操作的版本号和数据的版本号不一致时, 就操作失败. Redis就是用这种操作来解决事务冲突问题的

图解:

在这里插入图片描述

在这里插入图片描述

Redis实现乐观锁的命令实现:

watch key : 可以监视一个或者多个key
unwatch key : 取消对key的监控

实际操作中可能遇到的问题?

  1. 连接超时问题:
    原因: redis无法一下操作过多的客户端,需要等待,等待时间过长
    解决:使用jedis连接池
  2. 超卖问题: 原因: 没有加上事务的操作 解决: 加上事务
  3. 库存遗留问题:
    原因: 版本修改问题,当事务监控的数据修改过后,虽然库存还有,但是因为进行了修改版本,所以也无法更改成功. 认定失败
    解决 : 使用Lua脚本来解决; 使用java代码中的同步代码块

猜你喜欢

转载自blog.csdn.net/First_____/article/details/120090422