当前位置:首页 > 科技  > 软件

使用隔离层级和重试机制,Spring Boot轻松实现高并发

来源: 责编: 时间:2024-01-08 09:18:05 348观看
导读高并发难题高并发是开发者面临的一项挑战。使用Read Uncommitted隔离层级和重试机制,可以大幅提高系统的性能。在高并发系统中,锁异常始终是一个问题。多名用户或进程同时访问常常导致资源的争用,导致锁冲突,并导致异常和

高并发难题

高并发是开发者面临的一项挑战。使用Read Uncommitted隔离层级和重试机制,可以大幅提高系统的性能。RvZ28资讯网——每日最新资讯28at.com

在高并发系统中,锁异常始终是一个问题。多名用户或进程同时访问常常导致资源的争用,导致锁冲突,并导致异常和性能瓶颈。该问题不仅会打断开发流程,还会妨碍用户体验。解决这个问题对于确保流畅的、无中断的服务至关重要,同时优化资源利用率,面对不断增加的高并发应用的需求。RvZ28资讯网——每日最新资讯28at.com

解决方案

锁异常是处理大量写操作和事务时最常见的异常。接下来,我们使用乐观锁来解决这个问题。RvZ28资讯网——每日最新资讯28at.com

Spring Boot中的乐观锁是一种确保多用户环境中数据完整性的并发控制机制。它支持多个客户端同时读取和更新数据,同时最小化冲突。这是通过将版本号或时间戳与数据库中的每条记录相关联来实现的。当客户端更新记录时,将检查版本号以检测自数据最初读取以来,其他客户端是否对其进行了更改。如果检测到冲突,系统可以通过回滚事务并抛出异常来处理它,这个异常可以用于重试尝试。乐观锁是Spring Boot的JPA(Java 持久化 API)的关键功能,用于以安全和高效的方式管理数据库记录。RvZ28资讯网——每日最新资讯28at.com

首先,我们需要在实体中添加由spring boot管理的列,如下面的代码所示。RvZ28资讯网——每日最新资讯28at.com

@Entity@Datapublic class YourEntity {    @Id    @GeneratedValue    private Long id;    // 其他字段    @Version    private Long version; // 乐观锁版本列}

在上面的代码注释中,当对特定行进行更新时,@Version会自动更改版本号。所以,处理此行的其他事务会发现版本号已经更改,并将引发异常。我们可以捕获此异常来重试事务,如下代码所示。RvZ28资讯网——每日最新资讯28at.com

@Servicepublic class MyService {    @Autowired    private YourEntityRepository yourEntityRepository; // 假设有实体仓库    @Transactional(isolation = Isolation.READ_UNCOMMITTED)    @Retryable(        value = {OptimisticLockingException.class},        maxAttempts = 3,        backoff = @Backoff(delay = 200))    public YourEntity yourBusinesslogicTransactionMethod(Long entityId) {        YourEntity entity = yourEntityRepository.findById(entityId).orElse(null);                if (entity == null) {            throw new EntityNotFoundException("Entity with ID " + entityId + " not found.");        }        // 更新数据        entity.setName("UpdatedName");        // 存储到数据库        try {            yourEntityRepository.save(entity); // not using native query, only using default JPA methods        } catch (OptimisticLockingException ex) {            // 如果出现乐观锁异常,则表示发生了并发更新。            // @Retryable注释将触发指定次数的重试。            throw ex;        } catch (Exception ex) {            // 处理其他异常        }        return entity;    }}

在上面代码中,我们捕获异常,如果发现锁异常,则重试事务。隔离层级通常与事务性注释一起使用。RvZ28资讯网——每日最新资讯28at.com

Spring Boot中的隔离层级通过定义并发事务所做更改的可见性来控制数据库系统中的事务如何相互交互。隔离层级包括如下类型:RvZ28资讯网——每日最新资讯28at.com

READ_UNCOMITTED:支持读取其他事务未提交的更改,提供最小的隔离。RvZ28资讯网——每日最新资讯28at.com

READ_COMMITTED:支持只读取已提交的更改,防止脏读取。RvZ28资讯网——每日最新资讯28at.com

REPEATABLE_READ:确保在当前事务完成之前,其他事务的更改不可见,从而消除不可重复的读取。RvZ28资讯网——每日最新资讯28at.com

SERIALIZABLE:提供与其他事务的完全隔离,防止对数据的任何并发访问。RvZ28资讯网——每日最新资讯28at.com

READ_UNCOMITTED隔离层级提供了最高的并发性。因此,在上面的代码中,我们首先读取一行,然后尝试更新该行,在更新过程中,如果值发生了更改,JPA将检查版本列,这意味着在我们读取后,其他写入操作也更改了值。JPA在版本号更改时抛出锁异常。我们捕获此异常并重试事务。下次事务将读取更新后的值。RvZ28资讯网——每日最新资讯28at.com

在Retry注释的帮助下,我们可以轻松配置重试策略,如重试尝试、重试尝试和尝试重试的异常之间的持续时间。RvZ28资讯网——每日最新资讯28at.com

代码分析

版本注释与JPA默认查询完美配合。因此,在读取和更新期间,请尝试使用默认的JPA查询,不要使用本机查询。如果使用本机查询,则需要自己更新版本列数据。RvZ28资讯网——每日最新资讯28at.com

当请求数量非常高,而每行的并发请求较少时,这种方法非常好。在例子中,我们没有每行的高并发性。对于一行,并发请求的可能性几乎为零,但我们仍然得到了锁异常,因为我们没有指定任何隔离级别,默认隔离级别是READ_COMMITTED。RvZ28资讯网——每日最新资讯28at.com

乐观锁在不确定数据库锁行为的情况下很有价值。不用依赖数据库的锁定机制,而是在应用程序代码中处理数据并发冲突。RvZ28资讯网——每日最新资讯28at.com

在乐观锁中,只有正在更新的行被锁定,而不是整个表。当事务更新一行时,通常会增加与该行相关的版本号或时间戳,并且在更新过程中,会检查版本或时间戳。如果另一个事务同时修改了同一行,则会检测到并发冲突,您可以根据需要进行处理。RvZ28资讯网——每日最新资讯28at.com

乐观锁不会自动锁定相邻行或多行。它的设计目的是通过只锁定特定更新操作中涉及的行来最大限度地减少对并发访问的影响。其他事务可以继续读取或修改同一表中不相关的行,而不会被阻止。RvZ28资讯网——每日最新资讯28at.com

根据事务和数据库系统的隔离级别,带有WHERE子句的读取查询可能会锁定行。但是,确切的锁定行为会根据所使用的隔离级别而有所不同。在乐观的锁定场景中,重要的是要仔细考虑隔离级别,以最大限度地降低阻塞其他事务的风险。RvZ28资讯网——每日最新资讯28at.com

总结

优化高并发任务时,策略方法是必不可少的。在Spring Boot应用程序中,可利用隔离层级并采用高效的重试机制以及乐观锁,在性能和数据完整性之间取得平衡。RvZ28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-57933-0.html使用隔离层级和重试机制,Spring Boot轻松实现高并发

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 算法江湖:揭秘分布式框架下的四大高手

下一篇: 使用Pytorch构建图卷积网络预测化学分子性质

标签:
  • 热门焦点
  • 红魔电竞平板评测:大屏幕硬实力

    前言:三年的疫情因为要上网课的原因激活了平板市场,如今网课的时代已经过去,大家的生活都恢复到了正轨,这也就意味着,真正考验平板电脑生存的环境来了。也就是面对着这种残酷的
  • vivo TWS Air开箱体验:真轻 臻好听

    在vivo S15系列新机的发布会上,vivo的最新款真无线蓝牙耳机vivo TWS Air也一同发布,本次就这款耳机新品给大家带来一个简单的分享。外包装盒上,vivo TWS Air保持了vivo自家产
  • 7月安卓手机好评榜:三星S23Ultra好评率第一

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年7月1日至7月31日,仅限国内市场。第一名:三星Galaxy S23 Ultra好评率:95.71%在即将迎来新
  • 分布式系统中的CAP理论,面试必问,你理解了嘛?

    对于刚刚接触分布式系统的小伙伴们来说,一提起分布式系统,就感觉高大上,深不可测。而且看了很多书和视频还是一脸懵逼。这篇文章主要使用大白话的方式,带你理解一下分布式系统
  • 微软邀请 Microsoft 365 商业用户,测试视频编辑器 Clipchamp

    8 月 1 日消息,微软近日宣布即将面向 Microsoft 365 商业用户,开放 Clipchamp 应用,邀请用户通过该应用来编辑视频。微软于 2021 年收购 Clipchamp,随后开始逐步整合到 Microsof
  • 零售大模型“干中学”,攀爬数字化珠峰

    文/侯煜编辑/cc来源/华尔街科技眼对于绝大多数登山爱好者而言,攀爬珠穆朗玛峰可谓终极目标。攀登珠峰的商业路线有两条,一是尼泊尔境内的南坡路线,一是中国境内的北坡路线。相
  • 腾讯盖楼,字节拆墙

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之“想重温暴刷深渊、30+技能搭配暴搓到爽的游戏体验吗?一起上晶核,即刻暴打!”曾凭借直播腾讯旗下代理格斗游戏《DNF》一
  • 超级标准版旗舰!iQOO 11S全球首发iQOO超算独显芯片

    上半年已接近尾声,截至目前各大品牌旗下的顶级旗舰都已悉数亮相,而下半年即将推出的顶级旗舰已经成为了数码圈爆料的主流,其中就包括全新的iQOO 11S系
  • 引领旗舰级影像能力向中端机普及 OPPO K11 系列发布 1799 元起

    7月25日,OPPO正式发布K系列新品—— OPPO K11 。此次 K11 在中端手机市场长期被忽视的影像板块发力,突破性地搭载索尼 IMX890 旗舰大底主摄,支持 OIS
Top