Redis实战案例16-redisson的快速入门

news2024/12/27 11:09:39

1. 可能存在的问题

在这里插入图片描述

  1. 不可重入:基于SETNX实现的简单分布式锁通常不支持可重入性,即同一个客户端在获取锁后不能再次获取锁,否则会导致死锁。
  2. 不可重试:如果多个客户端同时尝试获取锁但都失败了,并且没有重试机制,那么所有客户端都会放弃获取锁,导致无法正常运行需要锁的操作。
  3. 超时释放:客户端处理业务时间过程,引发锁释放的隐患。
  4. 主从一致性:当一个客户端尝试获取锁时,它将向主节点发送SETNX命令,如果成功设置了锁,那么该客户端获取到了锁。但是,由于Redis是一个主从复制的分布式数据库,主节点和从节点之间存在数据同步的延迟。如果主节点还没有将锁的信息同步到所有的从节点上,这时候如果主节点发生故障或发生了主从切换,那么从节点可能会成为新的主节点,并且新的主节点不会有之前的锁信息。这会导致锁信息在主从切换后丢失,破坏了分布式锁的一致性。

对于主从一致性补充:在主从复制的分布式数据库环境中,主节点上的锁信息会被同步到从节点,但是主从节点之间存在一定的数据同步延迟。因此,可能会出现从节点在延迟期间还不知道新的锁信息的情况。假设一个客户端成功获取了分布式锁,并且这个锁信息已经被写入了主节点的内存中。然而,如果在这个锁信息被完全同步到所有从节点之前发生了主节点故障或主从切换,那么新的主节点可能会不知道这个锁的存在,破坏了分布式锁的一致性。

解决方法:
在这里插入图片描述
官网地址: https://redisson.org
GitHub地址:
https://github.com/redisson/redisson

2. Redisson入门案例

在这里插入图片描述
在这里插入图片描述

注意先登录一个用户之后再启动JMeter

// 一人一单
// 用户id
Long userId = UserHolder.getUser().getId();
// 创建锁对象(注意要拼接用户id,实现单个用户的一人一单,只有同一个id的请求打来时才要进行锁定)
// SimpleRedisLock lock = new SimpleRedisLock(stringRedisTemplate, "order:" + userId);
RLock lock = redissonClient.getLock("order:" + userId);
// redissonClient.getLock()无参默认是获取失败就返回
boolean isLock = lock.tryLock();
if(!isLock){
    return Result.fail("一人只能抢一次哦~");
}
try {
    // 获取IVoucherOrderService的代理对象
    IVoucherOrderService proxy = (IVoucherOrderService) AopContext.currentProxy();
    return proxy.createVoucherOrder(voucherId);
} finally {
    lock.unlock();
}

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

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

相关文章

基于RWKV-Runner大语言模型系统

RWKV Runner 旨在消除大语言模型的使用门槛,全自动处理AI对话,并且提供了OpenAI API兼容的接口。使用起来简单方便,但是还是比较吃机器,显存2G到32G都可以使用,根据自己的模型选择即可。 总结起来: 使用起来方便简单,上手容易。需要有电脑基础,很多地方还不是傻瓜化。需…

LayUI框架——选项卡等element组件使用

目录 前言 一、element组件 1. element基础方法 2. 更新渲染 二、动态实现选项卡 要求 1. 优化dao类 2. 优化前端JSP页面 3. 引入头部hand.jsp页面 4. 优化后台主界面js 5. 运行效果图 前言 在项目中我们需要编写许多页面,在页面中有许多元素需要自动去完…

【Unity编辑器扩展】字库裁剪工具, 优化字体文件大小,批量修改文本组件字体

原理: 1. 扫描项目中用到的字符集; 2. 把字体文件裁剪掉没用到的字符,仅保留项目中用到的字符; 3. 生成裁剪后的字体文件; 工具功能设计: 1. 支持通过拖拽字体文件或文件夹批量选择需要裁剪的字体文件。…

网络安全设备Bypass功能介绍及分析

网络安全平台厂商往往需要用到一项比较特殊的技术,那就是Bypass,那么到底什么是Bypass呢,Bypass设备又是如何来实现的?下面我就对Bypass技术做一下简单的介绍和说明。 一、 什么是Bypass。 大家知道,网络安全设备一般…

mac安装Golang开发环境及入门

目录 一、Mac brew 安装go环境 1.1 安装步骤 1.2 设置GOPATH 及环境变量 1.3 编写第一个go程序 二、快速入门 1.1 快速入门需求 1.2 go学习(自用) 一、Mac brew 安装go环境 1.1 安装步骤 1)终端输入,也可以指定下载go版本…

SPSSAU方差分析+python

准备数据 将数据格式调整为以下格式: jupyter处理过程 #读取数据 import numpy as np import pandas as pd# 创建一个空的DataFrame t1 pd.DataFrame() t2 pd.DataFrame() t3 pd.DataFrame() T1pd.read_excel(./数据/抑郁_T1.xlsx)T1.columnsT1.iloc[0] T1T1…

模板类与继承

模板类与继承 模板类继承普通类普通类继承模板类的实例化版本。普通类继承模板类模板类继承模板类模板类继承模板参数给出的基类 模板类继承普通类 基类 派生类 测试函数; 普通类继承模板类的实例化版本。 模板基类 普通类继承模板基类的实例化版本: 普通…

PROFINET转DeviceNet网关devicenet通讯模块

远创智控YC-DNT-PN这款神器,连接PROFINET和DeviceNet网络,让两边数据轻松传输。 这个网关不仅从ETHERNET/IP和DEVICENET一侧读写数据,还可以将缓冲区数据交换,这样就可以在两个网络之间愉快地传递数据了!而且&#xff…

云计算的学习(三)

三、云计算中的网络基础知识 3.1虚拟化中网络的架构 a.虚拟化中网络的架构 二层交换机作为接入交换机使用,三层交换机可以作为汇聚交换机或核心交换机,在抛开网络安全设备时,路由器直接连接在互联网上。 b.广播和单播 物理服务器内部主要…

【单片机】MSP430单片机,msp430f5529,DHT11 温湿度检测仪,上限报警,单击双击判定,OLED

文章目录 功能接线示意图效果图原理 功能 硬件 IIC OLED 0.96寸 无源蜂鸣器 低电平触发 DHT11 温湿度传感器 板子上的2个按键 板子上的2个灯 功能: 1 显示温湿度 2 按键单击双击识别 3 按键修改温湿度,双击选择某一个设置项目,单击进行加或…

Python(五):print函数详解

❤️ 专栏简介:本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中,我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 :本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

Redis 高频面试题 2023 最新版

Redis 高频面试题 2023 最新版 文章目录 Redis 高频面试题 2023 最新版一、Redis缓存相关1. 什么是缓存穿透?如何解决2. 什么是缓存击穿?如何解决 一、Redis缓存相关 1. 什么是缓存穿透?如何解决 是什么 缓存穿透就是根据某条件查询一个数据…

C++STL:顺序容器之forward_list

文章目录 1. 概述2. 成员函数和使用forward_list容器相关的函数 3. forward_list 容器的创建 1. 概述 forward_list 是 C 11 新添加的一类容器,其底层实现和 list 容器一样,采用的也是链表结构,只不过 forward_list 使用的是单链表&#xff…

解决ubuntu cuda版本nvcc -V和nvidia-smi不一致问题

在使用nvcc -V和nvidia-smi查看cuda版本时不一致: nvcc -V版本是10.1 nvidia-smi的版本是12.2 上面如果能显示版本,所以是已经有驱动,首先要删除之前的驱动: 1、执行以下命令,删除旧版本的驱动 sudo apt-get purge …

数据库用户管理

一 目录 一 新建用户 二 用户名的改变 三 删除用户 四 修改用户密码root用户 五 忘记mysql的密码时候怎么办 六 数据库的权限赋予 ​编辑 七 查询用户名的权限 八 权限的撤销 九总结 新建用户 CREATE USER 用户名来源地址 [IDENTIFIED BY [PASSWORD] 密码]; 只是一个用…

node中表单验证捕获第三方库

1.安装 npm install escook/express-joi npm install joi17.4.0 2.使用 2.1创建一个schema文件夹 说明:用于表单规则集,设置表单的规划的 // 导入定义验证的包 const joi require("joi");// 定义用户名和密码的验证规则 const username j…

数据结构(王卓版)——初识数据结构

一、数据结构讲什么: 程序数据结构算法 数据结构的基础以及数据结构的应用方向。 数据、数据元素、数据项、数据对象 数据结构 逻辑结构的种类 存储结构种类 主要学习顺序和链式存储结构。 有时间可以了解,不用重点学。 数据类型: 抽象数据类…

win11利用start11实现全屏菜单,磁贴配置

Win11磁贴配置 最近电脑还是升级到 win11 了。我之前采用的美化方案是桌面上的图标全部移到 win10 开始菜单里的全屏菜单上,用磁贴贴一排。每次要访问文件的时候都去开始菜单里找,而不是放在桌面上,这样桌面也可以空出来欣赏壁纸。参考配置链…

数据库压力测试方法概述

一、前言 在前面的压力测试过程中,主要关注的是对接口以及服务器硬件性能进行压力测试,评估请求接口和硬件性能对服务的影响。但是对于多数Web应用来说,整个系统的瓶颈在于数据库。 原因很简单:Web应用中的其他因素,…