前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >乒乓智能科技二面经历

乒乓智能科技二面经历

作者头像
MickyInvQ
发布2023-03-17 09:48:25
1830
发布2023-03-17 09:48:25
举报
文章被收录于专栏:InvQ的专栏InvQ的专栏

redis 可重入锁了解吗?

1 可重入锁的需求

单纯的 Redis 分布式锁仍然有些场景不满⾜的,如⼀个⽅法获取到锁后,可能在⽅法内继续调这个⽅法,就获取不到锁了。这时就要把锁改进成可重⼊锁。

重⼊锁,是以线程为单位,当⼀个线程获取对象锁后,该线程还可再次获取该对象上的锁,⽽其它线程不可以。可重⼊锁是为防⽌死锁。

注:在java的编程中synchronized 和 ReentrantLock都是可重入锁。

2 实现原理

为每个锁关联⼀个请求计数器和⼀个占有它的线程。当计数为0,认为锁未被占有。

线程请求⼀个未被占有的锁时,JVM将记录锁的占有者,并将请求计数器置1。

若同⼀线程再请求该锁,计数将递增 每次占⽤线程退出同步块,计数器值将递减。直到计数器为0, 锁被释放

⽗类和⼦类的锁的重⼊:⼦类重写⽗类的 synchonized ⽅法,然后调⽤⽗类中的⽅法,此时若没有重⼊锁,这段代码将死锁。

redis 可重入锁

如下图使用redisson加锁后会在redis中创建一个hash类型的数据,其中redisKey是order,key是线程的线程id+线程获取锁的次数,value是线程获取锁的次数。

在这里插入图片描述
在这里插入图片描述

百万转账并发

redis首先记录抗住并发,然后多线程将redis的记录同步到mysql,最后再使用业界熟悉的本地事务+mq消息表进行消费,来保证最终一致性。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-03-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • redis 可重入锁了解吗?
    • 1 可重入锁的需求
      • 2 实现原理
        • redis 可重入锁
        • 百万转账并发
        相关产品与服务
        云数据库 MySQL
        腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档