Redis 事务及 a Java 操作 s Redis 事务

本文深入探讨Redis事务机制,包括multi、exec、discard、watch命令的使用,以及悲观锁和乐观锁的概念。通过实例说明事务如何处理多操作,确保数据一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Redis 事务及 a Java 操作 s Redis 事务

1 、 什么是事务?

事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。就
是把多件事情当做一件事情来处理,全部成功或者全部失败。

2 、 Redis 实现事务的 4 个重要命令

multi、exec、discard、watch(乐观锁)

3 、 Redis 实现事务

Redis 使用 multi 开启事务,通过 exec 提交事务,discard 用于回滚事务
事务回滚,数据无变化

[外链图片转存失败(img-ILfbbUpE-1566285146565)(C:\Users\ADMINI~1\AppData\Local\Temp\1566225859508.png)]

提交事务,数据进行更新

[外链图片转存失败(img-3hGhWC9e-1566285146569)(C:\Users\ADMINI~1\AppData\Local\Temp\1566225889886.png)]

事务中,错误的操作不会被执行,已经正确的操作会被执行,且不会回滚

[外链图片转存失败(img-pMrN9i4o-1566285146574)(C:\Users\ADMINI~1\AppData\Local\Temp\1566225911903.png)]

4 、 什么是悲观锁和乐观锁?

4.1、悲观锁

悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会 block 直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。

4.2、乐观锁

乐观锁(Optimistic Lock), 顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量。

4.3、总结

适用于多读的应用类型,这样可以提高吞吐量。

4.3、总结

在实际生产环境里边,如果并发量不大且不允许脏读,可以使用悲观锁解决并发问题;但如果系统的并发非常大的话,悲观锁定会带来非常大的性能问题,所以我们就要选择乐观锁定的方法。两种锁各有优缺点,不可认为一种好于另一种,像乐观锁适用于写比较少的情况下,即冲突真的很少发生的时候,这样可以省去了锁的开销,加大了系统的整个吞吐量。但如果经常产生冲突,上层应用会不断的进行 retry 重复读取,这样反倒是降低了性能,所以这种情况下用悲观锁就比较合适

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值