使用分布式锁要注意什么

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

相关推荐
mCell6 小时前
你以为短链接只是 Hash + 301/302?
后端·算法·架构
咖啡八杯7 小时前
GoF设计模式——迭代器模式
java·后端·设计模式·迭代器模式
IT_陈寒10 小时前
SpringBoot自动配置不是你以为的那样的智能
前端·人工智能·后端
程序员张312 小时前
SpringBoot集成BCrypt密码加密库
java·spring boot·后端
CaffeinePro12 小时前
FastAPI数据库集成SQLAlchemy异步ORM全方案
后端·fastapi
小旭Coding12 小时前
凌晨告警轰炸!Go 服务协程只增不减,内存持续暴涨直至 OOM
后端
半个落月12 小时前
用 LangChain.js 手写一个能读写文件和执行命令的 Mini Cursor
javascript·人工智能·后端
9523613 小时前
RabbitMQ-基础操作
java·spring boot·分布式·后端·spring·rabbitmq
柒和远方13 小时前
从审计日志到可下载证据包:事务型 Outbox、租约 fencing 与保留水位
前端·后端·架构
geovindu15 小时前
CSharp: Prototype Pattern
开发语言·后端·设计模式·.net·原型模式·创建型模式