Redis 入门三:事务
主要内容:
本文的主要内容是 Redis 的事务。
事务:
首先要说明的是 Redis 中的事务与 MySQL 中的事务是不一样的,虽然都叫事务,但是 Resis 中是无法实现 MySQL 中的事务的,前面我们也已经提到了,Redis 中的事务是不支持 ACID 特性的。
那 Redis 中的事务是什么呢?在 Redis 中事务是一个单独隔离操作,换句话说,事务中的所有命令在执行之前会先组队,也就是组合成一个整体,接着被序列化,然后被顺序执行,事务在执行过程中,不会被其他的客户端发来的命令所打断。
Redis 中事务的主要作用是什么呢?串联多个命令,防止别的命令插队。
组队注意事项:
如果命令在组队时出现错误,在执行时所有的命令都不会被执行。
如果命令组队成功,但是在执行时,命令可以运行成功的会被成功执行,不可以执行成功的,会失败。
事务冲突:
首先要先搞明白什么时候会出现事务冲突:比如三个用户同时操作一个数据,那到底听谁的呢?这就发生冲突了。
解决冲突最有效的方式就是加锁。在 Redis 中,有悲观锁和乐观锁两种。
那什么是悲观锁呢?某个用户在操作数据之前,先给这个数据加上锁,防止其他用户操作,只有在这个用户完成操作并释放锁之后,其他用户才可以操作这个数据。
那什么是乐观锁呢?就是某个用户在操作数据时,并不会把这个数据给保护起来,而是给这个数据加上版本号,谁在操作这个数据,谁就去更新版本号,当别的用户想要操作数据时,先获取这个数据的版本号,然后和自己以前手上的版本号进行对比,如果相同,才可以操作这个数据。
乐观锁适用于多读的应用类型,可以提高吞吐量,redis 利用这种 check-and-set 机制实现事务。在 redis 中,默认是开启的乐观锁。
但是乐观锁也有问题,比如在电商平台的秒杀的应用场景中,他可以解决超卖问题,但是会带来库存遗留问题,解决库存遗留问题可以使用连接池来解决。
事务三特性:
单独隔离操作
没有隔离级别概念
不保证原子性
版权声明: 本文为 InfoQ 作者【打工人!】的原创文章。
原文链接:【http://xie.infoq.cn/article/9b4680bc1d75c831f04329271】。文章转载请联系作者。
评论