谷粒商城实战(009 缓存-分布式锁)

news2025/6/8 12:03:28

Java项目《谷粒商城》架构师级Java项目实战,对标阿里P6-P7,全网最强

总时长 104:45:00 共408P

此文章包含第158p-第p165的内容


分布式锁

原理和使用

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
使用下shell对产生的命令进行发送
查看 -> 撰写 -> 撰写栏

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

在这里插入图片描述

idea 选中的代码提取成方法
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

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

加锁和过期时间是一个原子操作 就可以避免死锁
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

使用lua

在这里插入图片描述

也可以全部用lua脚本写分布式锁,这种一半Java代码,一半Redis运行代码,受网络原因影响很大 。网上有基于lua脚本实现的分布式锁 。
在这里插入图片描述

原子删锁
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
怕业务未执行完锁就过期了,可以给过期时间设置长一些 如300秒
在这里插入图片描述
在这里插入图片描述

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

redis自己实现分布式锁的最大的问题就是自旋,自旋消耗cpu资源,所以还是得中间件进行阻塞,比如zookeeper。
ZooKeeper 可以作为解决自旋问题的一种工具或组件的一部分。在分布式系统中,如果多个节点或线程需要协调访问某个共享资源,可以借助 ZooKeeper 提供的分布式锁机制来解决自旋问题。

具体来说,当一个节点或线程需要访问共享资源时,它可以尝试获取一个分布式锁。如果锁已经被其他节点或线程持有,那么它可以选择在获取锁之前自旋一段时间,等待锁释放。当锁释放时,它再次尝试获取锁。如果自旋等待的时间过长,也可以选择放弃自旋,暂时释放 CPU 控制权,并稍后再次尝试获取锁。

总的来说,虽然 ZooKeeper 本身并不直接解决自旋问题,但它提供了一种分布式锁的实现,可以帮助分布式系统中的节点或线程协调访问共享资源,从而间接地解决自旋问题。

使用更专业的Redisson进行分布式锁操作

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

在这里插入图片描述

在这里插入图片描述
第二个带配置,我们使用第一个原生的

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
单元测试
在这里插入图片描述

在这里插入图片描述

可重入锁

在这里插入图片描述

注入的变量名称最好可以和配置类里的名称(组件ID)一样(不一样也可以)
在这里插入图片描述
在这里插入图片描述
继承了juc包下的Lock类
在这里插入图片描述
在这里插入图片描述
阻塞式等待,不需要自旋了
(无锁自旋和重量级锁)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
使用了redis的看门狗 会自动续期
在这里插入图片描述

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

redis 看门狗原理

在这里插入图片描述

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

这里看不懂应该去学习手动使用redis实现分布式锁,框架是对手动的封装,看不懂很正常
在这里插入图片描述

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

读写锁

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
写成功才能读到
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述

闭锁

在这里插入图片描述
在这里插入图片描述
Latch翻译:门闩(shaun)
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

juc lock的用法如下选中的蓝色代码
在这里插入图片描述

信号量

在这里插入图片描述

在这里插入图片描述

设置3个车位
在这里插入图片描述

值变成0后无法继续停车(请求阻塞)
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
可以利用信号量进行限流操作
在这里插入图片描述

使用tryAcquire 不会阻塞 会直接返回false,利用false可以返回一个页面给客户,让样客户可以看到当前爆满,请稍后重试这样的页面
在这里插入图片描述

在这里插入图片描述

error那里可以直接写当前流量过大,请稍后重试
在这里插入图片描述

在这里插入图片描述


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

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

相关文章

使用tcpdump和wireshark进行服务器抓包分析

目录 前言 1.tcpdump简介 2.Wireshark简介 3.实际案例 4.代码示例 5.总结 前言 服务器抓包分析是一种非常常见和有效的网络故障排查和性能优化手段。通过捕获服务器上的网络流量,可以帮助我们深入了解服务器与其它设备之间的通信情况,发现问题并进…

基于8086贪吃蛇游戏系统方恨设计

**单片机设计介绍,基于8086贪吃蛇游戏系统方恨设计 文章目录 一 概要二、功能设计三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于8086的贪吃蛇游戏系统设计是一个结合了微处理器控制、游戏逻辑以及图形显示技术的综合性项目。该系统旨在通过8086微处理器…

JAVA----线程

线程 上回说到 进程 > 运行起来的程序 > 并发编程 > 多核 CPU 操作系统管理进程: 先描述 > PCB 结构体 来把进程的各种属性都表示出来再组织 > 通过链表数据结构把多个 PCB 串起来. PCB 核心属性(进程调度) pid 进程标识符内存指针, 该进程依赖的 指令…

NIKKI DENSO伺服驱动器维修NCR-CAB1A2D-801B

NEXSRT伺服驱动器维修NPSA-MU日机电装伺服维修ACTUS POWER,NCS-ZE12MDA/ZE1MDA-601A,NEXSRT日机电装伺服维修NCS-ZE12MDB-401A/NCS-ZAMDA-401AG。 NIKKI常见故障原因及处理方法: 1、电机在一个方向上比另一个方向跑得快; (1) 故…

Keil MDK 5.37 及之后版本 安装 AC5(ARMCC) 编译器详细步骤

由于 Keil 5.37 及之后版本不再默认安装 AC5(ARMCC) 编译器,这就会导致由 AC5 编译的工程无法正常编译,往往输出窗口会提示以下信息:*** Target ‘STM32xxxx‘ uses ARM-Compiler ‘Default Compiler Version 5‘ which is not available. —…

Redis数据库:概念、安装及常用操作命令

目录 前言 一、数据库概述 1、关系型数据库(RDBMS) 1.1 产生背景 1.2 概念 1.3 特点 1.4 优缺点 1.5 常见主流关系型数据库 2、非关系型数据库(NoSQL) 2.1 产生背景 2.2 概念 2.3 特点 2.4 优缺点 2.5 常见主流非关…

实验三 Java类的继承与派生(计算机专业)

实验三 Java类的继承与派生(头歌) 制作不容易,点个关注!给大家带来更多的价值! 目录 实验三 Java类的继承与派生(头歌)** 制作不容易,点个关注!给大家带来更多的价值&…

HBase(超级无敌详细PROMAX讲解版)

简介 概述 图-1 HBase图标 HBase原本是由Yahoo!公司开发的后来贡献给了Apache的一套开源的、基于Hadoop的、分布式的、可扩展的非关系型数据库(Non-Relational Database),因此HBase不支持SQL(非关系型数据库基本上都不支持SQL),而是提供了一套单独的命…

文件搜索案列 --java

目标: 搜索盘符下面符合要求的文件名,并可以选择是否打开该文件 代码: import java.io.File; import java.io.IOException; import java.util.Arrays; import java.util.Scanner;public class findQQ {public static void main(String[] a…

Node.js-------初识Node.js与内置模块

能够知道什么是 Node.js能够知道 Node.js 可以做什么能够说出 Node.js 中的 JavaScript 的组成部分能够使用 fs 模块读写操作文件能够使用 path 模块处理路径能够使用 http 模块写一个基本的 web 服务器 一.初识Node.js 1.浏览器中的 JavaScript 的组成部分 2.Node.js 简介 …

vscode安装通义灵码

作为vscode的插件,直接使用 通义灵码-灵动指间,快码加编,你的智能编码助手 通义灵码,是一款基于通义大模型的智能编码辅助工具,提供行级/函数级实时续写、自然语言生成代码、单元测试生成、代码注释生成、代码解释、研…

【日常记录】【JS】createNodeIterator 遍历DOM节点

文章目录 1、介绍2、createNodeIterator3、nodeType4、参考链接 1、介绍 createNodeIterator() 方法是 DOM API 中的一个方法,用于创建一个 NodeIterator 对象,可以用于遍历文档树中的一组 DOM 节点。就是可以把DOM 变成可遍历的 2、createNodeIterator …

SVM简介 详细推导 核函数 线性可分 非线性可分

SVM(Support Vector Machine) Vapnik发明用于解决二分类问题的机器学习算法。 线性可分与非线性可分 在二维平面中,线性可分指的是可以通过一条直线对平面上的点进行划分使得标签相同的点在直线的同一侧,标签不同的点在直线的不同侧。 在二维平面中&…

Linux:基本指令篇

文章目录 前言1.ls 指令2.pwd命令3.cd 指令4.touch指令5.mkdir指令(重要)6.rmdir指令 && rm 指令(重要)7.man指令(重要)8.cp指令(重要)9.mv指令(重要&#xff09…

时序数据库IoTDB:功能详解与行业应用

一文读懂时序数据库 IoTDB。 01 为什么需要时序数据库 解释时序数据库前,先了解一下何谓时序数据。 时序数据,也称为时间序列数据,是指按时间顺序记录的同一统计指标的数据集合。这类数据的来源主要是能源、工程、交通等工业物联网强关联行业…

【Java面试题系列】基础篇

目录 基本常识标识符的命名规则八种基本数据类型的大小,以及他们的封装类3*0.10.3返回值是什么short s1 1; s1 s1 1;有什么错? short s1 1; s1 1;有什么错?简述&&与&的区别?简述break与continue、return的区别?Arrays类的…

直方图均衡化的本质

Rafael C. Gonzalez “Digital Image Processing”的错误 直方图均衡化的本质是灰度级分布的近邻映射,这部分的内容全错。总有些人崇洋媚外。 我修改了相关的内容,参阅禹晶、肖创柏、廖庆敏《数字图像处理(面向新工科的电工电子信息基础课程…

如何在Linux系统运行RStudio Server并实现无公网IP远程访问【内网穿透】

文章目录 推荐 前言1. 安装RStudio Server2. 本地访问3. Linux 安装cpolar4. 配置RStudio server公网访问地址5. 公网远程访问RStudio6. 固定RStudio公网地址 推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下…

【Leetcode】top 100 二分查找

35 搜索插入位置 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为 O(log n) 的算法。 基础写法!!!牢记…

【算法刷题day14】Leetcode:144.二叉树的前序遍历、94.二叉树的中序遍历、145.二叉树的后序遍历

文章目录 二叉树递归遍历解题思路代码总结 二叉树的迭代遍历解题思路代码总结 二叉树的统一迭代法解题思路代码总结 草稿图网站 java的Deque 二叉树递归遍历 题目: 144.二叉树的前序遍历 94.二叉树的中序遍历 145.二叉树的后序遍历 解析:代码随想录解析…