分布式锁的实现

Zookeeper实现分布式锁 如何用Zookeeper实现分布式锁? 在学习分布式锁之前,需要首先了解一下Zookeeper的[临时顺序节点]。 什么是临时顺序节点? 让我们来回顾一下Zookeeper节点的概念: Zookeeper的数据存储结构就像一棵树,这棵树由节点组成,这种节点叫做Znode。 Znode分为四种类型: 1.持久节点 (PERSISTENT) 默认的节点类型。创建节点的客户端与zook... 阅读详情

使用场景

分布式项目,在高并发的场景下防止资源的超载,例如秒杀超卖问题

利用了Redis的一个特性,多个用户设置同一个Key的value,只能有一个用户设置成功

加锁方法

@Component
public class RedisLock {
    @Autowired
    private RedisTemplate redisTemplate;
//获取锁
    public boolean lock(String key,String value){
        //setIfAbsent 设置值,如果设置成功 返回结果 true
       if(redisTemplate.opsForValue().setIfAbsent(key,value)){
           //设置key的值成功,获取到了锁
           return true;
       }
       //解决死锁问题
        //大教室 占了一个位置   放一本书   死锁
        //保洁阿姨 固定时间 清理 教室
        //给锁设置一个有效期  10秒  过期锁释放掉

        //判断当前锁有没有过期
        String currentValue = (String) redisTemplate.opsForValue().get(key);
       //当前锁的值存储的是一个时间字符串
        //判断锁是否过期
        if(!StringUtils.isEmpty(currentValue)&&Long.parseLong(currentValue)<System.currentTimeMillis()){
            //锁已经过期,重新设置锁的值  getAndSet 先把key对应当前value获取到,设置一个新的value
            String oldValue=(String)   redisTemplate.opsForValue().getAndSet(key,value);

            return !StringUtils.isEmpty(oldValue)&&oldValue.equals(currentValue);
        }

        return false;

    }
}

释放锁的方法(放到同一个类里面)

//解锁
    public void unlock(String key,String value){
        //获取key对应value的值
        try {
            String currentValue=(String)  redisTemplate.opsForValue().get(key);
            //判断当前锁的值不为空,并且当前锁的值和要解锁的值相等,就进行解锁
            if(!StringUtils.isEmpty(currentValue)&&currentValue.equals(value)){
                //删除key对应数据
                redisTemplate.opsForValue().getOperations().delete(key);
            }
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("解锁异常");
        }
    }

使用锁

在使用锁的类里引用锁的对象

@Autowired
	private RedisLock redisLock;

在使用锁的类里面加代码

public void Test(){

//设置锁的名称
		String appId="creatOrderLock";
		//设置锁的值,锁的有效期
		//有效期2秒
		long timeOut=2*1000L;
		 String value = (System.currentTimeMillis()+timeOut)+"";
		 //获取锁
		boolean lock = redisLock.lock(appId, value);
		if(lock){
			/*
			这里是被锁的操作
			*/
		//操作后需要释放锁
		//解锁
			redisLock.unlock(appId,value);
		}
}
基于zookeeper实现分布式锁 前言:2016春节之后一直比较忙,因此博客N个没有更新,现在也是忙里偷闲,偷偷的更新一篇! 一、分布式锁介绍         分布式锁主要用于在分布式环境中保护跨进程、跨主机、跨网络的共享资源实现互斥访问,以达到保证数据的一致性。 二、架构介绍         在介绍使用Zookeeper实现分布式锁之前,首先看当前的系统架构图 阅读详情

相关推荐

Gem5模拟器,详解官网教程Event-driven programming(五)

Gem5模拟器,详解官网教程Event-driven programming、时间调度、如何自定义SimObject

qq_46675545的博客 2037

分布式锁的作用及实现(Redis)

一、什么是分布式锁?要介绍分布式锁,首先要提到与分布式锁相对应的是线程锁、进程锁。线程锁:主要用来给方法、代码块加锁。当某个方法或代码使用锁,在同一时刻仅有一个线程执行该方法或该代码段。线程锁只在同一JVM中有效果,因为线程锁的实现在根本上是依靠线程之间共享内存实现的,比如synchronized是共享对象头,显示锁Lock是共享某个变量(state)。进程锁:为了控制同一操作系统中多个进程访问某...

LiQiyao的博客 8万+

Star CCM+中衍生零部件下的阈值应用与区域内删除目标网格

同样的在绘制网格结束后,有时出现负体积网格或质量差的网格,为了节约时间成本,可能会选择将负体积的网格或质量差的网格删除。弹出相应的窗口,在窗口中选择相应的区域①,选择标量函数②(此处以网格体积变化为例),选择模型③,设置阈值④,选择No Dispalyer,会根据需求选择显示,最后点击Create⑥完成创建。此处以温度为例,若出现温度异常点,首先在①栏中勾选Function,然后在下面点击⑤Select,在弹出的Function窗口中选择温度场函数,再点击④Identify,查找温度异常网格数量。

2201_75375391的博客 2220

redis实现分布式锁的原理

redis实现分布式锁,从原理的实现,干货满满~~~

LYQ20010417的博客 1万+

Ansys Lumerical FDTD硬件配置避坑指南:从RTX 4090到A100的GPU选择实战

本文针对Ansys Lumerical FDTD仿真计算,深入分析了从消费级RTX 4090到专业级A100的GPU硬件配置选择。文章指出,选择的关键在于显存容量能否容纳仿真模型,并对比了二者在显存、双精度算力及多卡扩展性上的核心差异,为不同预算和仿真规模的用户提供了实战避坑指南与配置建议。

weixin_29196891的博客 270

大厂嵌入式面试常考八股文及算法

1.指向已被释放或无效的内存地址的指针是野指针。互斥锁是一种用于线程同步的机制,用于确保同一时间只有一个线程访问共享资源。多态是面向对象编程中的一种特性,它允许以一种统一的方式处理不同类型的对象,通过相同的接口可以表现出不同的行为。大小端(Endian)指的是在计算机存储和处理多字节数据时,字节的存储顺序。大端序(Big Endian):高位字节存储在低地址,低位字节存储在高地址。类似于将数字的高位放在左边,低位放在右边的表示方式。例如整数值0x12345678在内存中按照大端序排列为。

谢谢大家的关注 6149

Redis实现分布式锁

在多线程并发的情况下,我们可以使用锁来保证一个代码块在同一时间内只能由一个线程访问。比如Java的synchronized关键字和Reentrantlock类等等。 这样子可以保证在同一个JVM进程内的多个线程同步执行。 如果在分布式的集群环境中,如何保证不同节点的线程同步执行呢? 怎么才能在分布式系统中,实现不同线程对代码和资源的同步访问? 对于单进程的并发场景,我们可以使用语言...

forever-and-ever的博客 4万+

银河麒麟系统下VSCode安装全攻略:从下载到桌面快捷方式(附常见问题解决)

本文详细介绍了在银河麒麟系统下安装和优化VSCode的全流程,包括环境准备、安装策略、权限管理、桌面快捷方式创建以及系统级性能调优。特别针对国产系统环境提供了常见问题解决方案和必备插件推荐,帮助开发者高效配置开发环境。

v6b7n8m9q0的博客 1132

Zookeeper分布式锁实现

zookeeper最初设计的初衷就是为了保证分布式系统的一致性。本文将讲解如何利用zookeeper的临时顺序结点,实现分布式锁。

2301_76632762的博客 1372

PnP 单目相机位姿估计(二):solvePnP利用二维码求解相机世界坐标

前言 原理简介 输入参数准备 1 objectPoints特征点世界坐标 2 imagePoints特征点在摄像头下的像素点坐标 3cameraMatrixdistCoeffs内参矩阵和畸变矩阵 相机世界坐标的求解 1求世界坐标中的点在相机坐标系下的坐标 2求相机在世界坐标中的坐标 3效果求解相机在世界坐标系下的坐标点 4求解代码1.前言  很多时候,当我们利用单目相机获取图像时,往往只能获取图像中

cocoaqin的博客 5万+

深入理解 SAP HANA 上的查询处理机制:从 CDS 分层建模到执行计划落地

本文探讨了S/4HANA系统中CDS视图性能问题的本质及其优化策略。文章指出,性能问题往往源于数据模型、查询编译和执行计划的综合影响,尤其在多层CDS视图叠加时表现更为明显。通过分析SAP HANA查询处理链路的四个关键阶段(SQL Plan Cache、SQL Front End、SQL Optimizer和Execution Plan),揭示了CDS视图性能波动的根本原因。文章强调,优化CDS性能需要关注数据规模、谓词选择性和执行计划稳定性,建议使用参数化查询、合理分层视图结构,并利用PlanViz等工

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 4813

分布式锁实现方式

实现方式优点缺点适用场景数据库简单实现,适用小规模系统性能较低,易造成死锁低频、小规模分布式锁需求Redis高性能、自动过期、支持 Redlock 算法锁误释放风险,数据一致性受主从架构影响高并发、高性能场景ZooKeeper高可靠性、自动释放,支持选主和分布式队列性能略低,复杂性高长时间锁和一致性要求高场景。

yymagicer的博客 2298

PCB Layout工程师核心能力与实战进阶指南

PCB Layout是电子硬件从原理图到物理实现的关键环节,本质是将电路逻辑转化为受电磁场、热力学与制造工艺约束的三维空间结构。其设计质量直接决定信号完整性(SI)、电源完整性(PI)和电磁兼容性(EMC)等核心性能指标。随着高速接口(如PCIe Gen5、USB3.2)、高密度封装(BGA微间距、HDI)及车规/工业级可靠性要求提升,Layout已从‘连线’演进为多目标协同优化的系统工程。掌握Altium Designer等EDA工具、理解叠层设计与DFM规则、具备SI/PI仿真意识,并能贯通芯片Data

weixin_42589700的博客 86

redission实现分布式锁

在开始提到Redis分布式锁之前,先说一下redis中的两个命令。 SETNX key value setnx 是SET if Not eXists(如果不存在,则 SET)的简写。

qq_45243783的博客 2万+

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

分布式锁原理及实现

[TOC] 一、为什么需要锁? 多任务环境 任务都需要对同一共享资源进行写操作 对资源的访问是互斥的 二、分布式锁方案比较 三、Redis实现分布式锁 1. 单个JVM下实现 代码块加Synchronized锁或者Reentrantlock锁 2.分布式下实现 if(setnx(key,1) == 1){ expire(key,30) ...

至尊宝 2万+

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

什么是分布式锁,分布式锁的几种实现方式

不具备可重入的特性,因为同一个线程在释放锁之前,行数据一直存在,无法再次成功插入数据,所以,需要在表中新增一列,用于记录当前获取到锁的机器和线程信息,在再次获取锁的时候,先查询表中机器和线程信息是否和当前机器和线程相同,若相同则直接获取锁;没有锁失效机制,因为有可能出现成功插入数据后,服务器宕机了,对应的数据没有被删除,当服务恢复后一直获取不到锁,所以,需要在表中新增一列,用于记录失效时间,并且需要有定时任务清除这些失效的数据;在这个例子中,锁用于控制访问数据库的流量,最终起到了保护系统的作用。

w_l666的博客 2033

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Redisson 实现分布式锁

在平常的开发工作中,我们经常会用到锁,那么锁有什么用呢?锁主要是控制对共享资源的访问顺序,防止多个线程并发操作导致数据不一致的问题。经常可能会听到乐观锁、悲观锁、分布式锁、行锁、表锁等等,那么我们今天总结下分布式锁的实现方式之Redisson

qq_36833673的博客 1094

redis实现分布式锁_Redis分布式锁的实现

前言分布式锁一般有三种实现方式:1. 数据库乐观锁;2. 基于Redis的分布式锁;3. 基于ZooKeeper的分布式锁。本文将介绍第二种方式,基于Redis实现分布式锁。可靠性首先,为了确保分布式锁可用,我们至少要确保锁的实现同时满足以下四个条件:互斥性。在任意时刻,只有一个客户端能持有锁。不会发生死锁。即使有一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户端能加锁。具有容错性...

weixin_39647180的博客 173

Redission实现分布式锁

Redission实现分布式锁,Redis分布式锁

weixin_45807440的博客 1万+

分布式锁的实现方式有哪些

分布式有多少种实现方式?最后一种颠覆你的认知!

一个程序员的自我救赎。 1114

分布式锁的原理与实现 二、分布式锁的基础实现

  这一节中,我们将会使用上一节中分布式锁的原理:分布式锁的原理与实现 一、分布式锁的原理 。来一步一步的实现分布式锁。一、实现的接口定义:  其中,我们先定义一个给外部使用的接口:public interface DistributedLockService { boolean tryLock(Runnable runnable, String key); boolean t...

HappyHeng的博客 708
上一篇: 推特的id生成器的使用
下一篇: Jmeter压力测试工具的简单使用
Sonk.
博客等级 码龄8年 84粉丝 83原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sonk.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值