写点什么

Redis 入门三:事务

用户头像
打工人!
关注
发布于: 2 小时前
Redis入门三:事务

主要内容:

本文的主要内容是 Redis 的事务。

事务:

首先要说明的是 Redis 中的事务与 MySQL 中的事务是不一样的,虽然都叫事务,但是 Resis 中是无法实现 MySQL 中的事务的,前面我们也已经提到了,Redis 中的事务是不支持 ACID 特性的。

  • 那 Redis 中的事务是什么呢?在 Redis 中事务是一个单独隔离操作,换句话说,事务中的所有命令在执行之前会先组队,也就是组合成一个整体,接着被序列化,然后被顺序执行,事务在执行过程中,不会被其他的客户端发来的命令所打断。

  • Redis 中事务的主要作用是什么呢?串联多个命令,防止别的命令插队。

  • 组队注意事项:

  • 如果命令在组队时出现错误,在执行时所有的命令都不会被执行。

  • 如果命令组队成功,但是在执行时,命令可以运行成功的会被成功执行,不可以执行成功的,会失败。

事务冲突:

首先要先搞明白什么时候会出现事务冲突:比如三个用户同时操作一个数据,那到底听谁的呢?这就发生冲突了。

解决冲突最有效的方式就是加锁。在 Redis 中,有悲观锁和乐观锁两种。

  • 那什么是悲观锁呢?某个用户在操作数据之前,先给这个数据加上锁,防止其他用户操作,只有在这个用户完成操作并释放锁之后,其他用户才可以操作这个数据。

  • 那什么是乐观锁呢?就是某个用户在操作数据时,并不会把这个数据给保护起来,而是给这个数据加上版本号,谁在操作这个数据,谁就去更新版本号,当别的用户想要操作数据时,先获取这个数据的版本号,然后和自己以前手上的版本号进行对比,如果相同,才可以操作这个数据。

乐观锁适用于多读的应用类型,可以提高吞吐量,redis 利用这种 check-and-set 机制实现事务。在 redis 中,默认是开启的乐观锁。

但是乐观锁也有问题,比如在电商平台的秒杀的应用场景中,他可以解决超卖问题,但是会带来库存遗留问题,解决库存遗留问题可以使用连接池来解决。

事务三特性:

  • 单独隔离操作

  • 没有隔离级别概念

  • 不保证原子性


发布于: 2 小时前阅读数: 2
用户头像

打工人!

关注

打工人! 2019.11.10 加入

InfoQ年度最佳内容获得者。 本人打工人一枚,自动化和控制专业入坑人一枚。目前在研究深度强化学习(DRL)技术。准备入坑互联网小白一枚。喜欢了解科技前沿技术,喜欢拍照。

评论

发布
暂无评论
Redis入门三:事务