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

Redis-分布式锁(基本原理和不同实现方式对比)

文章目录

  • 1、基本原理
  • 2、不同实现方式

1、基本原理

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

分布式锁的核心思想就是让大家都使用同一把锁,只要大家使用的是同一把锁,那么我们就能锁住线程,不让线程进行,让程序串行执行,这就是分布式锁的核心思路

在这里插入图片描述
在这里插入图片描述
那么分布式锁他应该满足一些什么样的条件呢?

可见性:多个线程都能看到相同的结果,注意:这个地方说的可见性并不是并发编程中指的内存可见性,只是说多个进程之间都能感知到变化的意思

互斥:互斥是分布式锁的最基本的条件,使得程序串行执行

高可用:程序不易崩溃,时时刻刻都保证较高的可用性

安全性:安全也是程序中必不可少的一环

在这里插入图片描述

2、不同实现方式

常见的分布式锁有三种

  • Mysql:mysql本身就带有锁机制,但是由于mysql性能本身一般,所以采用分布式锁的情况下,其实使用mysql作为分布式锁比较少见
    Redis:redis作为分布式锁是非常常见的一种使用方式,现在企业级开发中基本都使用redis或者zookeeper作为分布式锁,利用setnx这个方法,如果插入key成功,则表示获得到了锁,如果有人插入成功,其他人插入失败则表示无法获得到锁,利用这套逻辑来实现分布式锁
    Zookeeper:zookeeper也是企业级开发中较好的一个实现分布式锁的方案

在这里插入图片描述

相关文章:

  • 清理测试数据用truncate还是delete
  • 14-23 深度神经网络的主要架构(RNN/LSTM/CNN)
  • 结合Langchain来开发一个能够通过POST请求获取GPT回答的智能体
  • Oracle连接mysql
  • 面向对象-封装
  • 【0291】Postgres内核之dynahash table 创建
  • 面向对象(Java)
  • Kafka集群部署(手把手部署图文详细版)
  • Vue + Element UI + JSEncrypt实现简单登录页面
  • Spring AI 1.0.0 新变化,从 0.8.1 如何升级
  • 标准库STL
  • day02-统计数据
  • 专题二:Spring源码编译
  • 华为机试HJ12字符串反转
  • 【UE5.3】笔记7 控制Pawn移动
  • 深入了解以太坊
  • 2017 年终总结 —— 在路上
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • Java 最常见的 200+ 面试题:面试必备
  • Java读取Properties文件的六种方法
  • opencv python Meanshift 和 Camshift
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • sublime配置文件
  • 阿里云Kubernetes容器服务上体验Knative
  • 服务器从安装到部署全过程(二)
  • 小程序开发之路(一)
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • ​低代码平台的核心价值与优势
  • # Kafka_深入探秘者(2):kafka 生产者
  • #pragma once
  • #如何使用 Qt 5.6 在 Android 上启用 NFC
  • (30)数组元素和与数字和的绝对差
  • (二)PySpark3:SparkSQL编程
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (推荐)叮当——中文语音对话机器人
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • .“空心村”成因分析及解决对策122344
  • .cfg\.dat\.mak(持续补充)
  • .gitignore文件_Git:.gitignore
  • .net framework4与其client profile版本的区别
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈
  • .net企业级架构实战之7——Spring.net整合Asp.net mvc
  • .Net转Java自学之路—SpringMVC框架篇六(异常处理)
  • [2019.3.20]BZOJ4573 [Zjoi2016]大森林
  • [Android]使用Retrofit进行网络请求
  • [C#][DevPress]事件委托的使用
  • [daily][archlinux][game] 几个linux下还不错的游戏
  • [ffmpeg] aac 音频编码
  • [FROM COM张]如何解决Nios II SBTE中出现的undefined reference to `xxx'警告
  • [HTML]Web前端开发技术29(HTML5、CSS3、JavaScript )JavaScript基础——喵喵画网页
  • [JavaEE系列] wait(等待) 和 notify(唤醒)
  • [leetcode 双指针]