数据问题

数据问题

老师,如果是redis的话, 多个请求同时访问,会造成数据不一致的问题(单体项目采用对象类锁可解决这个问题,但是负载均衡下派发给服务器,就没办法解决了,只有分布式锁可以解决),

 那如果多个请求对mysql进行访问的时候, 会不会出现,多个请求获取到了数据都是一样的, 然后更新的时候,是按照获取同样的数据进行更新呢?我想知道mysql是不是比redis安全一些啊, redis毕竟是单线程的。 比如说A 获取到了商品是50, B获取的也是50,然后A-1=49, 这时候B也要-1. 会不会还是49. 

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小班 2021-06-24 14:29:51

同学你好,很多个请求访问mysql数据库,并且执行更新等操作是会造成线程安全问题的,就是并发问题,一般需要处理这个问题,可以通过乐观锁或者悲观锁来解决。

祝学习愉快~

  • 提问者 rock221 #1

    乐观锁是自定义的,怎么使用,我也明白, 它效率比悲观锁高一些, 但是缺点需要自己构架。

    那悲观锁怎么实现啊, 在更新的时候使用 for  update , 但是你查询的时候获取的还是一样的数据啊。 想不太懂 

    2021-06-24 14:42:48
  • 好帮手慕小班 回复 提问者 rock221 #2

    同学你好,悲观锁(Pessimistic Lock) 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。

        ​悲观锁主要用于保护数据的完整性。当多个事务并发执行时,某个事务对数据应用了锁,则其他事务只能等该事务执行完了,才能进行对该数据进行修改操作。

        ​实现悲观锁利用select ... for update加锁, 操作完成后使用commit来释放锁。

    祝学习愉快~

    2021-06-24 17:36:53
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师