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

目录

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.xdnf.cn/news/1538055.html

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

相关文章

Vue 自定义指令实战

引言 Vue自定义指令是Vue.js框架中强大而灵活的功能之一,它允许开发者根据具体需求创建自定义的指令,以实现更加精细化的交互和数据绑定效果。本文将带你深入探索Vue自定义指令的使用方法、原理和实战,为你打开前端开发的新视野。 我们前面…

推荐10款知名的供应链管理系统,为企业选型提供参考!

本文将盘点十款供应链管理系统,为企业选型提供参考! 想象一下,一家企业在生产和销售产品的过程中,原材料供应不及时、库存积压严重、物流配送混乱。这时,供应链管理系统就如同一位高效的指挥家,将各个环节紧…

汽车EDI:MöllerTech EDI项目案例

MllerTech (以下简称 Mller)是一家德国的家族企业,成立于1730年,主要从事塑料和橡胶领域的生产和加工。公司以其在汽车工业、电子设备和机械制造等行业的解决方案而闻名,尤其是在汽车部件、密封件和工业用途的高性能塑…

进程的知识

进程知识 1.进程和程序的区别: 程序是静态的,它是保存在磁盘上的指令的有序集合,没有任何执行的概念进程是一个动态的概念,它是程序执行的过程,包括了动态创建、调度和销毁的整个过程 2.进程的执行方式: 并行执行 :…

彻底解决找不到msvcr100dll,无法继续执行代码的5个方法

MSVCR100.dll文件的丢失可能会引发一系列系统运行和应用程序功能上的问题。作为Microsoft Visual C运行库中的一个关键动态链接库文件,它的缺失会导致依赖于此文件的软件无法正常启动或执行预期功能。具体表现可能包括但不限于:应用程序崩溃、闪退&#…

SAP B1 营销单据 - 单据字段介绍(下)

背景 营销单据,SAP B1 中一群神秘的单据,在官方说明文档中并未指明【营销单据】范围,却经常使用这一说法。它们结构相似,在 用户定义字段(UDF) 功能里统一受【营销单据】部分增加字段的影响,可以相互复制(…

企语iFair-协同管理系统-任意文件读取

文章目录 免责申明漏洞描述搜索语法漏洞复现yaml修复建议 免责申明 本文章仅供学习与交流,请勿用于非法用途,均由使用者本人负责,文章作者不为此承担任何责任 漏洞描述 企语iFair协同管理系统getuploadimage.jsp接口处存在任意文件读取漏洞…

媒体购买指南:是什么以及如何开始

媒体购买是几乎任何企业都非常重要的一个过程,其中包括付费的网络广告、电视广告、音频广告、户外广告等,这些都是许多多渠道营销策略中的重要组成部分。然而,线上和线下广告远非简单之事,尤其是数字广告,随着各种平台…

LED智慧一体机已成为高端超微小间距COB显示领域的风向标

​LED智慧一体机成为推动智能会议、高效办公与教育创新的强大引擎。本文将深入剖析晶锐创显LED智慧一体机的技术革新、功能集成、应用场景以及其对未来显示技术发展的深远影响。 1、技术革新:COB超高清显示技术的璀璨绽放 LED智慧一体机之所以能在众多显示产品中脱…

深入探究HTTP网络协议栈:互联网通信的基石

在我们日常使用互联网的过程中,HTTP(HyperText Transfer Protocol,超文本传输协议)扮演着至关重要的角色。无论是浏览网页、下载文件,还是进行在线购物,HTTP协议都在背后默默地支持着这些操作。今天&#x…

DNS和ICMP

DNS DNS(Domain Name System ) DNS 是一整套从域名映射到 IP 的系统 关于DNS背景 TCP/IP 中使用 IP 地址和端口号来确定网络上的一台主机的一个程序 . 但是 IP 地址不 方便记忆 . 于是人们发明了一种叫主机名的东西 , 是一个字符串 , 并且…

2024好用的图纸加密软件推荐,10款最好用的cad图纸加密软件排行榜

在工程设计和建筑领域,CAD图纸承载着重要的技术信息和商业机密。因此,保护这些图纸的安全性显得尤为重要。为了帮助您选择合适的图纸加密软件,本文将推荐2024年最好用的10款CAD图纸加密软件,其中包括Ping32。 1. Ping32 Ping32是…

巴西新闻媒体发稿推荐-绍珀洛周报saopauloweekly

全球化浪潮中的巴西机遇 在全球化的进程中,拓展海外市场对于企业的发展至关重要。巴西作为南美洲最大的经济体和人口大国,拥有巨大的商业潜力。大舍传媒凭借其在媒体领域的丰富经验和广泛网络,成功与巴西多家权威媒体展开合作,为企…

执行测试_单元测试

在执行测试为主线,中间穿插质量特性,学会自动化工具的使用。 软件测试的过程 测试范围:逐渐增大:先使用白盒测试,然后黑盒测试的比例逐步增加。测试视角:从代码到使用 具体来说就是: 单元测试—…

性能测试的五大目标

性能测试的目的其实是为了验证软件系统是否能够达到用户的性能指标,发现软件系统中存在的性能瓶颈,随后优化软件,最后起到优化系统的目的。 主要有以下几点: 评估系统的能力 测试中得到的负荷和响应时间数据可以被用于验证所计…

工具方法 - Dropit文件管理工具

Personal Assistant to Automatically Manage Your Files / 自动管理文件的私人助理 之前为了管理电脑上的文件,尝试了一段时间DropIt这个工具。这是一个开源免费软件。使用时,只需将文件拖动到DropIt的浮动图标上,就会自动根据文件类型(文件…

Linux 查看磁盘 df -h 已经查看目录大小 du -sh ./*

使用df -h 命令可以查看磁盘信息 df -h 如下图所示: 获取当前目录 每个目录大小 du -sh ./* du -sh ./* 如果文件比较多 我们想获取文件大小最大的前10个 可以运行如下命令: du -ah | sort -rh | head -n 10 du -ah:显示当前目录及其子目录的所有文件和目录的…

YOLOv8+SAHI,针对小目标检测的切片辅助训练推理,缺陷检测检测精度大幅提升

💡💡💡本文摘要:1)分析了工业缺陷的难点;2)提供了用SAHI方法子图训练,如何自动生成对应xml的代码;3)SAHI+YOLOv8如何推理 原图 切分为子图训练+推理 1.工业缺陷检测介绍 得益于机器视觉的不断发展

Java程序的执行原理

计算机能认识的机器语言 机器语言是由0和1组成,分别代表不通电和通电两种运行状态(因为计算机底层都是硬件电路),例如:00011110101001.... 编程语言发展历程 机器语言 汇编语言 高级编程语言-Java、Python、C等 …

16个AI应用技巧,职场提升永远可以相信!

人工智能(AI)的迅速崛起,已经深刻地改变了多个行业,并将在未来持续塑造我们的职场格局。为了应对这一潮流,职场人士必须主动适应AI带来的技术变革,持续学习新技能,提升自己的专业能力。这篇文章…