[分布式锁]:Redis与Redisson

news2025/1/20 1:14:35

文章目录

  • 1 分布式锁
    • 1.1 为什么需要分布式锁?
      • 1.1.1 引入业务场景
      • 1.1..2 本地锁与分布式锁
    • 1.2 分布式锁核心思想
    • 1.3 基于Redis实现分布式锁
      • 1.3.1 基于Redis实现分布式锁问题
      • 1.3.2 问题时间线分析
  • 2 Redisson入门
    • 2.1 Redisson快速实现
    • 2.2 开门狗机制
    • 2.3 加锁的实现原理

1 分布式锁

1.1 为什么需要分布式锁?

1.1.1 引入业务场景

业务场景:在物流系统中,快递员提交支付请求,由于网络等原因一直没有返回二维码,此时快递员在发起一次请求,这样就会生成2个订单,这就重复了不符合业务场景,因此我们就要在生成交易订单时加锁,若获取到锁就执行,否则就抛出异常。

1.1…2 本地锁与分布式锁

锁的定义:用于保障并发访问时数据的一致性、可见性和安全性。在多线程中为避免数据竞争常使用锁来限制对共享资源的访问。

本地锁:诸如synchronized、Lock锁等,只适用于单体项目锁定,在多个节点的分布式项目中不适用。

分布式锁:诸如Redisson、ZooKeeper等,适用于分布式多节点锁定。

1.2 分布式锁核心思想

实现分布式锁,可以借助Redis的setnx命令实现,使用该命令时,若key存在,则返回1,若key不存在,则返回0,也就意味着key只能设置一次,假设有多个线程同时设置值,只有一个能设置成功,这样就得到互斥效果,即达到锁的效果。

setnx命令演示:
在这里插入图片描述

1.3 基于Redis实现分布式锁

1.3.1 基于Redis实现分布式锁问题

1.3.2 问题时间线分析

2 Redisson入门

2.1 Redisson快速实现

2.2 开门狗机制

2.3 加锁的实现原理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/625712.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python手写数字识别

神经网络是手写数字识别中常用的机器学习模型。它由许多神经元组成,每个神经元接收输入并生成输出。在前向传递过程中,神经元计算一些权重和偏移量的线性组合,并将其输入到一个非线性的激活函数中,从而生成神经元的输出。输出层通…

6道常见hadoop面试题及答案解析

Q1.什么是Hadoop?   Hadoop是一个开源软件框架,用于存储大量数据,并发处理/查询在具有多个商用硬件(即低成本硬件)节点的集群上的那些数据。总之,Hadoop包括以下内容:   HDFS(Ha…

Scrum经验性过程

软件开发是一个复杂的活动, 在软件产品开发的过程中不仅存在着需求的不确定性,也存在着技术的不确定性,再加上参与软件开发的主体通常是由多人组成的软件开发团队,加上人的因素,就让整个软件开发的活动变得非常复杂。如…

MySQL的索引详解

1.什么是MySQL的索引 1.1索引的概念 索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引, 并指定索引的类型,各类索引有各自的数据结构实现。 所以索引归根结底只是在做一件事,添加了索…

数据结构-Redis(三)

前面介绍了redis的String和哈希,接下来看看其他的数据结构 List LPUSH:左边放入 RPUSH:右边放入 LPOP:取出左边第一个数,并且移除 RPOP:取出右边第一个数,并且移除 由上操作可以看出&#…

chatgpt赋能python:Python中一行输出的方法

Python中一行输出的方法 Python是一种高级编程语言,其语法简洁、易于阅读、丰富的库和解释器使其成为了众多程序员的选择。在Python中有时需要一行输出多个值、变量或者其他信息,因此在本文中将介绍如何在Python中实现一行输出的方法。 一般的输出方法…

chatgpt赋能python:Python如何一行一行运行?

Python 如何一行一行运行? Python是一门广泛应用于开发Web、科学计算、人工智能等领域的高级编程语言。相比其他编程语言,Python简单易学,语法简洁优雅,拥有许多强大的第三方库和工具。但作为一个新手,可能会对Python…

【复习笔记】FreeRTOS(四) 列表项的插入和删除

本文是FreeRTOS复习笔记的第四节,列表项的插入和删除。 上一篇文章: 【复习笔记】FreeRTOS(三)任务挂起和恢复 文章目录 一、列表和列表项1.1. 列表1.2. 列表项1.3. 迷你列表项 二、实验目的三、测试例程四、实验效果 一、列表和列表项 列表和列表项是F…

Dubbo 注册,调用,通信,容错

Dubbo简化模型 3种开发方式 开发方式 举例 特点 XML配置 等 业务代码零侵入 扩展修改方便 注解方式 EnableDubbo DubboService DubboReference 扩展修改方便 修改需要重新编译代码 API编程 DubboBootstrap ServiceConfig ReferenceConfig应用 业务侵入性大 修改复杂…

【前端学习】React学习资料

React 是一种开源的 JavaScript 库,用于构建用户界面。它由 Facebook 开发并维护,已经成为了当今最流行的前端库之一。与其他框架不同,React 主要专注于视图层(View),旨在通过声明式、组件化的方式来构建复…

Pagination分页(antd-design组件库)展示所有配置选项和onChange的作用

1.Pagination分页 采用分页的形式分隔长列表,每次只加载一个页面。 2.何时使用 当加载/渲染所有数据将花费很多时间时; 可切换页码浏览数据。 组件代码来自: 分页 Pagination - Ant Design 3.本地验证前的准备 参考文章【react项目antd组件-d…

redis到底是怎么样进行渐进式hash的

Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。那么redis的底层是如何来存储数据的呢? 一、redis如何在存储大量的key时候,查询速度还能接近O(1)呢&#xf…

分布式事务方案学习

第100篇文章啦!分布式事务在面试中分布式事务也是十分重要的点,所以学习完分布式锁后我们就来学习分布式事务吧。 事务表示的是我们在业务逻辑中对数据库进行操作的一组单元,需要同时成功或同时失败,不了解的小伙伴们可以看一下下…

Linux编译器-gcc/g++(动静态链接)

目录 一、Linux编译器-gcc/g的使用1.1 背景知识1.2 预处理,编译,汇编,链接1.3 动静态链接 二、补充sudo设置 一、Linux编译器-gcc/g的使用 1.1 背景知识 我们为什么能在windows或者linux下进行C/C或者其它形式的开发呢?前提条件…

我在VScode学Java(Java一维数组、二维数组、JVM中的堆和栈)重制版

​ 我的个人博客主页:如果’真能转义1️⃣说1️⃣的博客主页 关于Java基本语法学习---->可以参考我的这篇博客:《我在VScode学Java》 Java一维数组、二维数组 零._.在Java中_什么是数组Java 数组是一种数据结构,存储一组相同类型的数据。引…

Docker网络模型(七)使用 IPvlan 网络

使用 IPvlan 网络 IPvlan 驱动为用户提供了全面控制 IPv4 和 IPv6 寻址的能力。 IPvlan 让操作者能完全操控二层(数据链路层)网络的 vlan 标签,甚至也提供了三层(网络传输层)路由控制给感兴趣的用户。对于抽象出物理限…

【SpringSecurity】CSRF、环境配置、授权、认证功能、记住我功能实现

SpringSecurity 文章目录 SpringSecurityCSRF跨站请求伪造攻击开发环境搭建认证直接认证使用数据库认证自定义登录界面 授权基于角色的授权基于权限的授权使用注解判断权限 记住我SecurityContext SpringSecurity是一个基于Spring开发的非常强大的权限验证框架,其核…

Java快速安装以及入门指南

安装 Java 环境教程 Java 是一种广泛应用于软件开发、Web 应用程序和移动应用程序等领域的编程语言。如果您要使用 Java 进行开发或运行需要 Java 程序,您需要先在计算机上安装 Java 环境。 本教程将向您介绍如何在 Windows 操作系统上安装和验证 Java 环境。还将…

第2章 可行性研究

文章目录 第2章 可行性研究2.1 可行性研究的任务2.2 可行性研究过程2.3 系统流程图2.3.1符号2.3.3 分层 2.4 数据流图2.4.1 符号1. 数据源点或终点2. 数据加工(变换数据的处理)3. 数据存储4.数据流数据流与数据加工之间的关系 2.4.2绘制数据流图的例子顶…

chatgpt赋能python:Python3.6.5到Python3.7.5:升级指南

Python 3.6.5到Python 3.7.5:升级指南 Python是一种广泛使用的编程语言,拥有强大的库和框架,能够开发各种类型的应用程序。在Python的发行版中,版本更新是常见的过程,以提供更好的性能和新的功能。 本文将介绍如何将…