分布式锁总结1 - 为什么需要分布式锁?

news2025/7/19 15:31:22

目录

1. 最基本的业务逻辑是:

2. 高并发场景下常见的缓存问题

2.1问题一 缓存穿透 : 一直查询不存在的数据

解决方案 : 短暂缓存null结果

2.2 问题二 缓存雪崩 : 大量key同时过期大量请求直击数据库

解决方案 : 在原有的过期时间上加一个随机的值,防止同时过期

2.3 问题三 缓存击穿 : 一个热点key过期此时大量请求直接到达数据库解决方案 : 控制一个人获得锁后查询数据库,查到后释放锁,其他人等待锁,获得锁后先查询缓存,然后根据情况判断是否查询数据库

3. 解决缓存击穿问题

3.1 首先想到的是使用synchronized加锁:

3.2 使用分布式锁


在常见的高并发量的场景下,为了避免线程抢占资源带来的问题,对资源上锁是很常见的操作,但是如果稍不留神就有可能因上锁而带来新的问题,此篇日记将在最常见的场景下梳理单体项目加锁到分布式项目加锁的整个流程以及常见的一些问题。

首先介绍业务背景,某商城商品三级分类列表数据的查询问题,分类列表数据作为热点数据,应该存放在缓存中。(此处不介绍本地缓存容易带来的数据一致性等问题,使用缓存中间件redis)

1. 最基本的业务逻辑是:

        1.请求分类数据。

        2.查询是否在缓存中,若从缓存中查询到则直接返回。

        3.若不在缓存中,则查询数据库,查询后写入缓存。

上面的业务逻辑在高并发的场景下会遇见常见的三个问题:

2. 高并发场景下常见的缓存问题

2.1问题一 缓存穿透 : 一直查询不存在的数据

解决方案 短暂缓存null结果

2.2 问题二 缓存雪崩 : 大量key同时过期大量请求直击数据库

解决方案 : 在原有的过期时间上加一个随机的值,防止同时过期

2.3 问题三 缓存击穿 : 一个热点key过期此时大量请求直接到达数据库解决方案 控制一个人获得锁后查询数据库,查到后释放锁,其他人等待锁,获得锁后先查询缓存,然后根据情况判断是否查询数据库

前面的三个问题中,缓存穿透加null结果缓存缓存雪崩过期时间加随机值都可以得到解决。而解决缓存击穿在于控制多线程中的同一时刻只能有一个线程可以获得锁查询数据库。

3. 解决缓存击穿问题

3.1 首先想到的是使用synchronized加锁:

    synchronized(this){
        //获取数据业务逻辑
    }

这样操作单个服务器上没有什么问题,但在分布式系统下this获取对象锁只能在本服务器加锁,无法控制所有服务器同时只有一个服务器获得锁:

若是众多请求负载均衡到不同服务器上则同时就有众多请求直达数据库。因此需要引入分布式锁的概念。

3.2 使用分布式锁

        详细请看: 分布式锁2 - redis实现分布式锁并解决常见问题

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

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

相关文章

国联安基金前置机用朝天椒USB Server实现了虚拟化

国联安基金近期上线了朝天椒USB Server产品,影响了虚拟化进程的物理前置机逐步退出了历史舞台,实现了虚拟化,通过USB服务器,虚拟机中也能网络识别各个前置机系统的认证U盾。 一、背景 国联安基金在金融业务运营过程中&#xff0c…

进度条QProgressBar

进度条控价,用来只是任务的完成情况 值 包括当前值、最大值、最小值 // 获取和设置当前值 int value() const; void setValue(int);// 获取和设置最大值 int maximum() const; void setMaximum(int);// 获取和设置最小值 int minimum() const; void setMinimum(i…

Datawhale X 南瓜书 task01学习笔记

机器学习三观 机器学习工程领先理论 what:什么是机器学习? 机器学习定义:研究关于“学习算法”(一类能从数据中学习出其背后潜在规律的算法)的一门学科PS:深度学习指的是:神经网络那一类学习算法,因此是机器学习的子集把深度学习单列出来…

Linux网络命令:用于请求和配置网络地址的命令dhclient详解

目录 一、概述 二、功能描述 三、基本使用 1. 命令格式 2. 常用选项 3. 获取帮助 ​编辑 4. 基本操作 四、工作原理 1. 发送DHCP请求 2. 接收DHCP响应 3. 请求IP地址 4. 确认IP地址 5. 配置网络接口 五、功能特点 六、配置文件 七、常用命令和示例 1、启动…

spring boot项目对接人大金仓

先确认一下依赖 第一 是否引入了mybatis-plus多数据源&#xff0c;如果引入了请将版本保持在3.5.0以上 <dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version>${dynam…

自闭症寄宿学校陕西:提供综合发展的教育环境

星贝育园&#xff1a;自闭症儿童的综合发展摇篮 在自闭症儿童教育的广阔领域里&#xff0c;寄宿制学校以其独特的康复环境和全方位的支持体系&#xff0c;为这些特殊的孩子点亮了希望之灯。广州的星贝育园自闭症儿童寄宿制学校&#xff0c;正是这样一所充满爱心与专业的机构&a…

【软件测试】详解测试中常用的几种测试方法

目录 一、集成测试二、 系统测试三、验收测试四、回归测试 总结 一、集成测试 术语 集成测试是继组件测试之后的又一个层次。集成测试假定交给这个层次的测试对象已经经过了组件测试&#xff0c;并且任何组件内部的缺陷都已经尽可能地被纠正。 集成 开发人员、测试人员和专…

R包:ggspatial空间画图

ggplot2语法的空间图形画图 Spatial data plus the power of the ggplot2 framework means easier mapping. 加载R包 # install.packages("ggspatial")library(ggplot2) library(ggspatial) load_longlake_data()Using layer_spatial() and annotation_spatial() g…

香港品牌JEWELRIESHOP发起商标维权,尚未TRO,跨境卖家注意排查

案件基本情况&#xff1a;起诉时间&#xff1a;2024-9-6案件号&#xff1a;2024-cv-08146品牌&#xff1a;JEWELRIESHOP原告&#xff1a;Chung Ting Yu原告律所&#xff1a;Ford Banister LLC起诉地&#xff1a;伊利诺伊州北部法院涉案商标/版权&#xff1a;原告品牌简介&#…

【触想智能】工业显示器在智慧城市中的应用市场分析

随着智能技术的快速发展和智慧城市的不断兴起&#xff0c;工业显示器作为智慧城市基础设施的重要组成部分&#xff0c;正逐渐成为市场热点。 触想工业显示器TPC-M200系列 工业显示器不仅在监控、交通、能源等领域有着广泛应用&#xff0c;还在提升智慧城市管理和运营效率方面发…

【前端】前端高级与前端全家桶——学的更深更广一点!

工作太卷了要加油呀&#xff01; 今天首次参加宣讲会&#xff0c;华测导航的&#xff0c;1/300&#xff0c;太可怕了 What can I do for your company? 前端&#xff0c; 更深一点&#xff08;JS、算法、底层原理、手写&#xff09; 当谈及前端开发的学习深度时&#xff0…

WRFDA保姆级安装教程

文章目录 前言基础环境准备Ubuntu20.04子系统安装WSL功能开启与Ubuntu子系统下载Ubuntu用户创建 Ubuntu 20.04 更换国内镜像 相关库及WRFDA安装检验和安装基础包WRF基础环境测试编译器基础环境测试基础库安装zlib安装hdf5安装netcdf4-c 安装netcdf-fortran安装mpich安装安装lib…

CSP-S 2024 提高级 第一轮(初赛) 阅读程序(1)

【题目】 CSP-S 2024 提高级 第一轮&#xff08;初赛&#xff09; 阅读程序&#xff08;1&#xff09; 1 #include <iostream> 2 using namespace std; 3 4 const int N 1000; 5 int c[N]; 6 7 int logic(int x, int y) { 8 return (x & y) ^ ((x ^ y)…

【资源三号卫星】

资源三号卫星 资源三号卫星&#xff08;ZY-3&#xff09;&#xff0c;作为中国第一颗民用高分辨率光学传输型测绘卫星&#xff0c;于2012年1月9日成功发射&#xff0c;正式拉开了我国在高分辨率对地观测领域自主发展的序幕。以下是对资源三号卫星的详细介绍&#xff1a; 基本…

从Servlet+JSP+JDBC到MyBatis:重构用户CRUD操作的高效之旅

前言 原生的JDBC&#xff1a; 原生的JDBC操作数据库&#xff0c;书写较为繁琐&#xff0c;降低开发效率。JDBC的局限性&#xff08;如代码冗余、SQL语句与Java代码紧密耦合、难以维护等&#xff09;。 相比于JDBC&#xff0c;Mybatis的优势&#xff1a; SQL与Java代码的分离、强…

2-102基于matlab的蒙特卡洛仿真

基于matlab的蒙特卡洛仿真&#xff0c;对64QAM和BPSK进行蒙特卡洛仿真&#xff0c;并绘出误码率曲线。程序已调通&#xff0c;可直接运行。 下载源程序请点链接&#xff1a; 2-102基于matlab的蒙特卡洛仿真

初探shell与bash使用指南

文章目录 一、shell二、bash第一步、新建脚本第二步、添加权限第三步、执行bash脚本 在日常开发中&#xff0c;经常使用到Linux服务器相关知识&#xff0c;输入命令获取想要的结果&#xff0c;本篇介绍shell 与 bash的相关知识。 一、shell 是命令行解释器&#xff0c;接收用户…

云岚到家 第一天实战总结

为什么使用post发送请求&#xff0c;参数依旧会被拼接带url上呢&#xff1f;这应该就是param 与data传参的区别。即param传参数参数会被拼接到url后&#xff0c;data会以请求体传递 不一定post发送请求&#xff0c;数据一定在请求体中&#xff0c;主要是看数据的格式。 后端c…

Makefile的写法以及gdb调试的使用方法

all:main # 一般makefile中的第一个目标都是all:可执行文件 # 为了保证&#xff0c;最后Makefile文件执行后一定会生成一个可执行文件main:main.o add.o gcc main.o add.o -o main main.o:main.cgcc -c main.c -o main.o add.o:add.cgcc -c add.c -o add.oclean: …

无人机之4G模块的主要功能和优势

一、增强图传 在无人机飞行过程中&#xff0c;传统的图传方式可能会受到信号遮挡或干扰的影响&#xff0c;导致图像传输不稳定甚至中断。而4G模块通过结合4G网络技术&#xff0c;能够在原有图传技术的基础上提供增强的图传功能。当传统图传信号不佳时&#xff0c;无人机可以自动…