使用分布式锁要注意什么

scss 复制代码
lock();
try{
   业务逻辑
} finally {
    unlock()
}

这个应该是很多时候大家看的锁流程,今天去一家公司聊技术,整个过程就在问sychronized, 冲入锁、Java锁高级队列的时候等等,今天说点其他的:

  • 什么时候解锁?
  • 事务都没提交锁能释放么?

其实很多时候并发锁没卡住都是在不适当的时候提前释放了锁,如下代码多个并发同时执行就可能数据还没提交其他并发在unlock后拿到锁,就可能出现卡不住

scss 复制代码
beginTransaction()
    beginTransaction()
        lock(key="abc");
        try{
           业务逻辑
           涉及多个系统为服务调用
           设计多个Domain的Entity冲入修改
        } finally {
            unlock(key="abc")
        }
    commintTransaction()
    
    其他为服务业务逻辑
commintTransaction()

实际情况可能比上面的例子更复杂,在Spring中其实有现成方案:

不过在GoLang中还没找到合适的解法,都没Spring完善

相关推荐
考虑考虑5 小时前
cmd局部设置java变量
运维·后端·自动化运维
陈随易8 小时前
在Finch用了62亿词元,我认为这是新一代Agent工具之神
前端·人工智能·后端
wing989 小时前
从codex转战workbuddy使用一周的感受
前端·人工智能·后端
EatFan9 小时前
Java接入支付宝 JSAPI 支付保姆教程(二):流程讲解与前后端代码讲解
前端·spring boot·后端·微信小程序·小程序·uni-app
步行cgn10 小时前
Spring 报错:No bean class specified on bean definition 的原因与解决
java·后端·spring
凤山老林10 小时前
Spring Boot 整合 Flowable 的企业级落地指南
数据库·spring boot·后端·flowable·工作流
苏三说技术10 小时前
Kafka已正式接入AI
后端
企业数字化笔记10 小时前
AI写的系统出现504怎么办?接口超时和数据库慢查询排查
数据库·后端
IT_陈寒10 小时前
Redis的Set操作居然能把我的服务整挂了?
前端·人工智能·后端
momo0611710 小时前
Redis新手入门 -- 学习笔记
redis·后端