华为二面被问Redis分布式锁,您是不是有点小瞧我了?

2023-11-15

之前写了两篇有关线程安全的文章:

  • 你管这叫线程安全?
  • .NET八股文:线程同步技术解读

分布式锁是"线程同步"的延续

最近首度应用"分布式锁",现在想想,分布式锁不是孤立的技能点,这其实就是跨主机的线程同步

进程内 跨进程 跨主机
Lock/Monitor、SemaphoreSlim Metux、Semaphore 分布式锁
用户态线程安全 内核态线程安全

单机服务器可以通过共享某堆内存来标记上锁/解锁,线程同步说到底是建立在单机操作系统的用户态/内核态对共享内存的访问控制。

而分布式服务器不是在同一台机器上:跨主机,因此需要将内存标记存储在所有机器进程都能看到的地方。

在开发很多业务场景会使用到锁,例如库存控制,抽奖等。
例如库存只剩1个商品,有三个用户同时打算购买,谁先购买库存立即清零,不能让其他二人也购买成功。

解读分布式锁

我们常说的线程安全、线程同步方案,包括此次的分布式锁都是基于“多线程/多进程对特定资源有更新操作”。

image

基本考量:

  1. 分布式系统,一个锁在同一时间只能被一个服务器获取 (这是分布式锁的基础)
  2. 具备锁失效机制,防止死锁 (防止某些意外,锁没有得到释放,那别人也无法得到锁)

Redis SET resource-name anystring NX EX max-lock-time 是一种最简单的分布式锁实现方案。

SET 命令支持多个参数:

  • EX seconds-- 设置过期时间(s)
  • <
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

华为二面被问Redis分布式锁,您是不是有点小瞧我了? 的相关文章

随机推荐

  • 百度地图marker点击切换icon以及上一个icon恢复原样

    var preMarker this map addEventListener click function e console log e if e overlay e overlay toString object Marker var
  • openresty+lua安装

    一 下载软件 下载ngx openresty xxx tar gz并解压 wget https openresty org download ngx openresty 1 9 7 1 tar gz ngx openresty xxx bu
  • 将包含children的数据解析构成iview的cascader或者树行需要的结构

    function convertTree rst const result 遍历 tree rst forEach item gt 解构赋值 let value value label label children children ite
  • 使用VS Code开发Arduino

    文章目录 目的 软件安装 快速使用 更多说明 编译输出时中文乱码 Arduino扩展配置说明 使用 arduino cli 总结 目的 Arduino官方的IDE作为编辑器的功能挺简陋的 用起来并不是很舒服 相比较之下用VS Code Vi
  • 面试官:说说TCP如何实现可靠传输

    今天来讲一下TCP是如何保证可靠传输的 这也是面试常问的一个题目 这个问题不单止能看出你是否真的了解TCP原理 更看出你是否有一个总结的能力 我们从三个部分来讲TCP是如何实现可靠传输的 滑动窗口 首先是讲TCP中的滑动窗口 它和TCP的可
  • 论文阅读: GeoNet: Unsupervised Learning of Dense Depth, Optical Flow and Camera Pose(CVPR2018)

    CVPR2018 GeoNet Unsupervised Learning of Dense Depth Optical Flow and Camera Pose 提出了一个联合估计深度 光流和pose的网络 这是在left right c
  • Javascript设计模式-04-工厂模式

    Javascript设计模式 04 工厂模式 简单工厂 抽象工厂 简介 工厂模式定义一个用于创建对象的接口 这个接口由子类决定实例化哪一个类 该模式使一个类的实例化延迟到了子类 而子类可以重写接口方法以便创建的时候指定自己的对象类型 个人理
  • webview跳转第三方APP

    hello 又是我鑫鑫 前言 这吃给大家带来的博客是关于webview跳转第三方APP的 相信这个问题也为难过各位 那么话不多说 我直接上代码 MainActivity java 这里的活动名我没有改 使用的话 将所有的Contact Cu
  • C规范编辑笔记(十三)

    往期文章 C规范编辑笔记 一 C规范编辑笔记 二 C规范编辑笔记 三 C规范编辑笔记 四 C规范编辑笔记 五 C规范编辑笔记 六 C规范编辑笔记 七 C规范编辑笔记 八 C规范编辑笔记 九 C规则编辑笔记 十 C规范编辑笔记 十一 C规范编
  • 线性表技巧之Note001-链表的最后一个节点

    找到单链表的尾节点 通常我们遍历单链表的代码如下 list 指向单链表的头节点 因此 list gt next 指向链表的第一个节点 LNode node list gt next while node NULL node node gt
  • Qt项目环境构建

    工欲善其事必先利其器 使用Qt来进行开发 得先配置好一个合适的环境 下面是我关于Qt项目环境构建的一些小结 Qt的项目构建主要依赖 pro文件 和 pri文件 include包含文件 提供pro的复用性高的东西给多个项目包含 所以新建一个Q
  • mysql query 查询_mysql提供了explain query_sql进行查询分析

    mysql提供了explain query sql进行查询分析 下边是一些参数说明 ID Query Optimizer 所选定的执行计划中查询的序列号 Select type 所使用的查询类型 主要有以下这几种查询类型 DEPENDENT
  • 面试时这样介绍算法,想不高薪都难,排序算法(冒泡排序)

    算法背景 冒泡排序是一种简单的排序算法 它重复地遍历要排序的数列 一次比较两个元素 如果他们的顺序错误就把他们交换过来 遍历数列的工作是重复地进行直到没有再需要交换 也就是该数列已经排序完成 这个算法的名字由来是因为越大的元素会经由交换慢慢
  • OpenCV-Python自适应直方图均衡类CLAHE及方法详解

    一 引言 对比度受限的自适应直方图均衡在OpenCV中是通过类CLAHE来提供实现的 老猿没研究过C 中的应用 但OpenCV Python中应用时与普通的Python类构建对象的机制有所不同 老猿做了相关测试 在此简单介绍一下 二 CLA
  • 为什么 API 治理需要内部倡导

    API 治理旨在帮助人们通过 API 实现最大价值 但是 只有了解 API 是什么以及 API 的重要性 并且认识到 API 治理是在帮助他们而不是监管他们 才能实现这一目标 这就是为什么在任何 API 治理举措中都必须包括内部 API 倡
  • 修改mesh的clolors属性

    using UnityEngine using System Collections public class ExampleClass MonoBehaviour void Start Mesh mesh GetComponent
  • Android开发笔记 自定义AlertDialog

    近期有个需求需要在自定义AlertDialog上添加一个输入框 并拿到输入的信息发送给后台 开发中有遇到些之前没有接触过的问题 所以记录下来 如果需要自定义的话 AlertDialog mDialog new AlertDialog Bui
  • linux中安装gitlab,修改密码

    安装分为远程下载安装和本地安装 远程的总提示我阿里云版本不对 所以我使用的是本地安装 1 清华的gitlab安装包下载地址 https mirrors tuna tsinghua edu cn gitlab ce yum el7 C M O
  • python爬取汽车之家_python爬取 汽车之家(汽车授权经销商)

    一 爬虫的目标 打开汽车之家的链接 https www autohome com cn beijing 出现如下页面 我们的目标是 点击找车 然后出现如下图 我们要把图中的信息抓取到 二 实现过程 我们选择 宝马5系 然后点击找车 注意宝马
  • 华为二面被问Redis分布式锁,您是不是有点小瞧我了?

    之前写了两篇有关线程安全的文章 你管这叫线程安全 NET八股文 线程同步技术解读 分布式锁是 线程同步 的延续 最近首度应用 分布式锁 现在想想 分布式锁不是孤立的技能点 这其实就是跨主机的线程同步 进程内 跨进程 跨主机 Lock Mon