当前位置: 首页 > article >正文

Redis——分布式锁

基本原理

分布式锁:满足分布式系统或集群模式下多进程可见并且互斥的锁

为什么要有分布式锁?

在只有一台服务器提供服务的情况下,乐观锁和悲观锁足以解决线程并发导致的问题。但是企业开发中避免不了需要部署多台服务器,即采用分布式系统或集群模式,这时,多台服务器就有多个jvm,对应多个锁监视器,它们之间是独立了,服务器之间的线程并不会共享锁信息,此时很可能会出现并发问题,很容易想到一个解决办法就是将让所有线程共享一个锁监视器,这就是我们分布式锁的基本思路。

核心思想

分布式锁的核心思想就是让大家都使用同一把锁,这样我们就可以不让线程并行,而是让程序串行执行
在这里插入图片描述

分布式锁应该满足的特点

  • 高可用性
  • 多线程可见
  • 互斥
  • 高性能
  • 安全性
    在这里插入图片描述

常见的分布式锁

在这里插入图片描述
不同的分布式锁有不同的特点,对应不同的应用场景,没有绝对的优劣之分,我们要根据不同场景选择合适的分布式锁。

Redis中分布式锁的实现方式

实现分布式锁时需要实现的两个基本方法:

  • 获取锁:

    • 互斥:确保只能有一个线程获取锁
    • 非阻塞:尝试一次,成功返回true,失败返回false
  • 释放锁:

    • 手动释放
    • 超时释放:获取锁时添加一个超时时间
      在这里插入图片描述

http://www.kler.cn/news/311566.html

相关文章:

  • JVM 虚拟机的编译器、类加载过程、类加载器有哪些?
  • Paragon NTFS for Mac和Tuxera NTFS for Mac,那么两种工具有什么区别呢?
  • python中的排序函数sorted
  • 波分技术基础 -- MS-OTN介绍
  • AIGC论文查重是什么?
  • 【Verilog学习日常】—牛客网刷题—Verilog快速入门—VL23
  • C++笔记21•C++11的新特性•
  • Springboot请求响应案例
  • Ruoyi Cloud K8s 部署
  • Golang | Leetcode Golang题解之第415题字符串相加
  • MySQL:索引02——使用索引
  • kafka 超详细的消息订阅与消息消费几种方式
  • 【运维】自定义exporter
  • Redis——笔记01
  • 【PyQt5】object属性
  • Java中的异步编程模式:CompletableFuture与Reactive Programming的实战
  • 性格类型识别系统源码分享
  • DTD 实体
  • 【HTTP】HTTP报文格式和抓包
  • C++初阶:STL详解(五)——vector的模拟实现
  • 【JOIN 详解】SQL连接全面解析:从基础到实战
  • PostgreSQL主从切换测试
  • 使用BGP及静态路由方式实现链路冗余和ByPass
  • C:字符串函数(完)-学习笔记
  • 北斗盒子TD20——水上作业的安全防线,落水报警守护生命
  • React 中的延迟加载
  • 音视频入门基础:AAC专题(10)——FFmpeg源码中计算AAC裸流每个packet的pts、dts、pts_time、dts_time的实现
  • AUTOSAR_EXP_ARAComAPI的5章笔记(6)
  • 高级java每日一道面试题-2024年9月18日-设计模式篇-JDK动态代理,CGLIB代理,AspectJ区别?
  • 组件封装有哪些注意事项—面试常问优美回答