使用分布式锁要注意什么

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完善

相关推荐
Java女侠_9年实战2 小时前
多线程的“我以为线程安全”——SimpleDateFormat、ArrayList、HashMap、双重检查锁
后端
Leevec3 小时前
红包系统:高并发下如何保证不超发
后端
码事漫谈3 小时前
Graphify 简明指南
后端
代码羊羊3 小时前
rust-字符串(切片)、元组、结构体、枚举、数组
开发语言·后端·rust
JavaGuide3 小时前
万字详解 RAG 向量索引算法和向量数据库
后端·面试
舒一笑3 小时前
Docker 离线镜像导入后变成 <none>:<none>?一文讲透原因、排查与正确打包姿势
后端·docker·容器
Nyarlathotep01133 小时前
并发集合类(1):CopyOnWriteArrayList
java·后端
霸道流氓气质4 小时前
SpringBoot中调用mybatis方法提示映射文件未找到Invalid bound statement(not found)的奇葩解决
spring boot·后端·mybatis