砍材农夫砍材农夫
  • 微信记账小程序
  • java
  • redis
  • mysql
  • 场景类
  • 框架类
  • vuepress搭建
  • hexo搭建
  • 云图
  • 常用工具

    • git
    • gradle
    • Zadig
    • it-tools
    • 开源推荐
    • curl
  • 大前端

    • nodejs
    • npm
    • webpack
    • 微信
    • 正则
    • uniapp
  • java

    • java基础
    • jdk体系
    • jvm
    • spring
    • spring_cloud
    • spring_boot
    • 分库分表
    • zookeeper
  • python

    • python基础
    • python高级
    • python框架
  • 算法

    • 算法
  • 网关

    • spring_cloud_gateway
    • openresty
  • 高可用

    • 秒杀
    • 分布式
    • 缓存一致
  • MQ

    • MQ
    • rabbitMQ
    • rocketMQ
    • kafka
  • 其它

    • 设计模式
    • 领域驱动(ddd)
  • 关系型数据库

    • mysql5.0
    • mysql8.0
  • 非关系型数据库

    • redis
    • mongoDB
  • 分布式/其他

    • ShardingSphere
    • 区块链
  • 向量数据库

    • M3E
    • OPEN AI
  • Jmeter
  • fiddler
  • wireshark
  • AI入门
  • AI大模型
  • AI插件
  • AI集成框架
  • 相关算法
  • AI训练师
  • 量化交易
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 相关运营
  • docker
  • k8s
  • devops
  • nginx
  • 元宇宙
  • 区块链
  • 物联网
  • linux
  • webrtc
  • web3.0
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 中考
  • 投资
  • 保险
  • 思
  • 微信记账小程序
  • java
  • redis
  • mysql
  • 场景类
  • 框架类
  • vuepress搭建
  • hexo搭建
  • 云图
  • 常用工具

    • git
    • gradle
    • Zadig
    • it-tools
    • 开源推荐
    • curl
  • 大前端

    • nodejs
    • npm
    • webpack
    • 微信
    • 正则
    • uniapp
  • java

    • java基础
    • jdk体系
    • jvm
    • spring
    • spring_cloud
    • spring_boot
    • 分库分表
    • zookeeper
  • python

    • python基础
    • python高级
    • python框架
  • 算法

    • 算法
  • 网关

    • spring_cloud_gateway
    • openresty
  • 高可用

    • 秒杀
    • 分布式
    • 缓存一致
  • MQ

    • MQ
    • rabbitMQ
    • rocketMQ
    • kafka
  • 其它

    • 设计模式
    • 领域驱动(ddd)
  • 关系型数据库

    • mysql5.0
    • mysql8.0
  • 非关系型数据库

    • redis
    • mongoDB
  • 分布式/其他

    • ShardingSphere
    • 区块链
  • 向量数据库

    • M3E
    • OPEN AI
  • Jmeter
  • fiddler
  • wireshark
  • AI入门
  • AI大模型
  • AI插件
  • AI集成框架
  • 相关算法
  • AI训练师
  • 量化交易
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 相关运营
  • docker
  • k8s
  • devops
  • nginx
  • 元宇宙
  • 区块链
  • 物联网
  • linux
  • webrtc
  • web3.0
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 中考
  • 投资
  • 保险
  • 思
  • 基础面试题
    • 常见问题
    • 基础问题
    • 特殊场景
    • 锁场景
  • 一般锁实现方式
  • 存在的问题
  • 版本比对
在一个分布式系统中,当一个线程去读取数据并修改的时候,
因为读取和更新保存不是一个原子操作,在并发时就很容易遇到并发问题,进而导致数据的不正确

一般锁实现方式

  • 使用 MySQL:
这种方式是通过在数据库中创建一个唯一索引的表,然后通过插入一条数据来获取锁,
如果插入成功则获取锁成功,否则获取锁失败。释放锁的操作就是删除这条数据。
这种方式的优点是实现简单,缺点是性能较低,因为涉及到数据库的操作。
  • 使用 ZooKeeper:
ZooKeeper 提供了一个原生的分布式锁实现。其基本思想是创建一个临时有序节点,
然后判断自己是否是所有子节点中序号最小的,如果是则获取锁成功,
否则监听比自己序号小的节点,当该节点删除时再次尝试获取锁。
这种方式的优点是能够保证公平性,缺点是实现较为复杂。
  • 使用 Redis:
这种方式是通过 Redis 的 SETNX 命令来实现的,这个命令可以在键不存在时设置值,
如果键已存在则不做任何操作。通过这个原子操作,我们可以实现在多个节点之间的互斥访问。
这种方式的优点是性能高,实现简单,缺点是需要处理锁的超时和续期问题。

存在的问题

  • 锁超时
  • 锁续期
  • 误删除
  • 脑裂问题与Redlock

版本比对

Image text

最近更新: 2026/2/6 13:49
Contributors: kcnf
Prev
特殊场景