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

Java面试题--分布式锁

分布式锁

你说一下什么是分布式锁

分布式锁是在分布式/集群环境中解决多线程并发造成的一系列数据安全问题.所用到的锁就是分布式锁,这种锁需要被多个应用共享才可以,通常使用Redis和zookeeper来实现。

分布式锁有哪些解决方案
常用的三种方案

基于数据库实现:通常基于主键,或者唯一索引来实现分布式锁,但是性能比较差,一般不建议使用

基于Redis :可以使用setnx来加锁 ,但是需要设置锁的自动删除来防止死锁,所以要结合expire使用.为了保证setnx和expire两个命令的原子性,可以使用set命令组合。

另外释放锁在finallly中调用del删除锁,而删除锁前需要判断该锁是否是当前线程加的锁以免误删除锁,需要通过get获取锁然后进行判断,但是需要保证get判断或和del删除锁的原子性,可以使用LUA脚本实现。

总之自己封装Redis的分布式锁是很麻烦的,我们可以使用Redissoin来实现分布式锁,Redissoin已经封装好了。

基于zookeeper : 使用临时顺序节点实现,线程进来都去创建临时顺序节点,第一个节点的创建线程获取到锁,后面的节点监听自己的上一个节点的删除事件,如果第一个节点被删除,释放锁第二个节点就成为第一个节点,获取到锁。

在项目中可以使用curator,这个是Apache封装好的基于zookeeper的分布式锁方案。

Redis如何实现分布式锁,用什么命令

可以使用setnx来加锁 ,但是需要设置锁的自动删除来防止死锁,所以要结合expire使用.为了保证setnx和expire两个命令的原子性,可以使用set命令组合。

Redis实现分布式锁可能会出现什么问题,如何解决

添加锁和设置过期时间可以使用set命令进行组合,达到原子性加锁

需要用lua解决删除和判断锁的原子性,否则可能会删除掉别人的锁。

Redis集群环境中,redis节点挂掉可能会导致加锁失败,可以使用Redisson的红锁来解决。

了解Redission的看门狗原理吗?

Redisson对分布式锁进行了封装,对于锁超时问题,它提供了看门狗进行锁时间的续期,底层使用了定时任务每10s检查一下,如果业务还未执行完成,未释放锁,就进行超时时间续期。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 多目标跟踪之StrongSORT论文(翻译+精读)
  • 目标检测 | yolov9 原理和介绍
  • 吐血整理 ChatGPT 3.5/4.0/4o 新手使用手册~
  • 使用 Python 进行 PDF 文件加密
  • Sed编辑器
  • 【案例49】ORA-01000:超出打开游标的最大数
  • 基于SpringBoot+Vu e.js校园疫情防控系统的设计与实现
  • Visual Studio中 生成版本号
  • LeetCode //C - 316. Remove Duplicate Letters
  • Java-ByteArrayResource和InputStream
  • RabbitMQ的介绍
  • 深入理解 Go 语言原子内存操作
  • VS工程中的ALL_BUILD、INSTALL、ZERO_CHECK简介
  • NLP位置编码
  • vue3动态引入图片不显示问题
  • [nginx文档翻译系列] 控制nginx
  • 2017-09-12 前端日报
  • 4个实用的微服务测试策略
  • css系列之关于字体的事
  • ES10 特性的完整指南
  • Java多态
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • miaov-React 最佳入门
  • spring boot 整合mybatis 无法输出sql的问题
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • SQLServer之创建数据库快照
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • underscore源码剖析之整体架构
  • 从0实现一个tiny react(三)生命周期
  • 动态魔术使用DBMS_SQL
  • 翻译:Hystrix - How To Use
  • 解析带emoji和链接的聊天系统消息
  • 码农张的Bug人生 - 见面之礼
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • 正则表达式小结
  • UI设计初学者应该如何入门?
  • ​浅谈 Linux 中的 core dump 分析方法
  • ‌U盘闪一下就没了?‌如何有效恢复数据
  • # 飞书APP集成平台-数字化落地
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • (1) caustics\
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (done) 两个矩阵 “相似” 是什么意思?
  • (LeetCode) T14. Longest Common Prefix
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (差分)胡桃爱原石
  • (二)Eureka服务搭建,服务注册,服务发现
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (数据大屏)(Hadoop)基于SSM框架的学院校友管理系统的设计与实现+文档
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...