Redis-04- 事务与锁机制

本贴最后更新于 690 天前,其中的信息可能已经水流花落

1.Redis 的事务

1.1 事务简介

Redis 事务是一个单独的隔离操作,事务中的所有命令都会序列化、按顺序执行。事务在执行的过程中,不会被其他客户端发送的命令打断。

主要作用:串联多个命令防止别的命令插队。

从输入 Multi 命令开始,输入的命令都会一次进入命令队列中,但不会执行,直到输入 Exec 后,Redis 会将之前的命令队列中的命令依次执行。

组队的过程可以通过 discard 来终止

image.png

1.2 事务的错误处理

组队中某个命令出现了错误,执行时整个队列都会被取消

image.png

如果执行阶段某个命令报告错误,则只要报错的命令不执行,而其他的命令照常执行,不进行回滚。

image.png

2 锁机制

案列:

一个请求想给金额减 8000

一个请求想给金融减 5000

一个请求想给金额减 1000

image.png

2.1 悲观锁

image.png

image.png

2.2 乐观锁

image.png

2.3 WATCH key [key ...]

在执行 multi 之前,先执行 watch key1 ....可以监视多个 key,如果在事务执行之前这些 key 被其他命令改动,那么改事务将被打断执行。

image.png

2.4 unwatch

取消 watch 命令的监视

如果在执行 watch 命令之后,exec 命令或 discard 命令先被执行,那么此 UNwatch 命令将不会执行

3.Redis 事务的特性

  • 单独的隔离操作:事务中的所有命令都会序列化执行,执行过程不会被其他客户端的请求打断
  • 没有隔离级别的概念:队列中的命令在没有提交前都不会被实际执行
  • 不保证原子性:事务中如果有命令执行失败,之后的命令仍然会被执行,即没有回滚操作
  • Redis

    Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。从 2010 年 3 月 15 日起,Redis 的开发工作由 VMware 主持。从 2013 年 5 月开始,Redis 的开发由 Pivotal 赞助。

    284 引用 • 247 回帖 • 210 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...