0

0

在 Spring Boot 中通过缓存提高后端性能

心靈之曲

心靈之曲

发布时间:2024-11-13 11:51:26

|

970人浏览过

|

来源于dev.to

转载

在 spring boot 中通过缓存提高后端性能

在当今世界,应用程序性能至关重要。用户期望快速的响应时间,尤其是在高流量应用程序中,延迟可能会影响或破坏用户体验。缓存是增强后端性能的最有效方法之一,特别是在处理重复或昂贵的数据检索操作时。在这篇文章中,我们将深入探讨 spring boot 的缓存,并讨论各种缓存策略和实现技巧,以提高应用程序的速度。

为什么要缓存?

缓存允许应用程序临时存储数据,从而减少从数据库或外部服务检索频繁访问的数据所需的时间。通过减少直接数据库访问,缓存有助于降低服务器负载、优化网络使用,最重要的是,加快响应时间。

缓存的常见用例包括:

  • 重复获取静态或很少更改的数据。
  • 复杂、高成本计算的处理结果。
  • 存储用户会话或身份验证令牌。
  • 在 spring boot 中设置缓存

spring boot 通过利用 @enablecaching 注释并为缓存管理提供简单的抽象,可以轻松地向应用程序添加缓存。

第 1 步:在 spring boot 应用程序中启用缓存

首先,通过将 @enablecaching 添加到您的主应用程序类来启用缓存:

@springbootapplication
@enablecaching
public class application {
    public static void main(string[] args) {
        springapplication.run(application.class, args);
    }
}

这将启用 spring 的缓存基础设施,它将在您的方法上查找缓存注释来管理缓存条目。

第 2 步:添加缓存提供程序

spring boot 提供了多种缓存提供程序,包括:

concurrenthashmap(默认):适合简单应用或本地缓存。
ehcache:一种流行的内存缓存,对 java 应用程序有强大的支持。
redis:由于其网络化、内存数据结构功能,非常适合分布式应用程序。
hazelcast、咖啡因、memcached 等
让我们在这里使用 redis 作为我们的缓存提供者。将 redis 依赖项添加到您的 pom.xml 中:


    org.springframework.boot
    spring-boot-starter-data-redis

在 application.properties 文件中,配置 redis 服务器连接:

spring.cache.type=redis
spring.redis.host=localhost
spring.redis.port=6379

注意:请确保您的本地计算机上正在运行 redis 或连接到云 redis 服务。

第 3 步:应用缓存注释

启用缓存并配置提供程序后,您可以开始将缓存注释应用到受益于缓存的方法。最常用的注解是@cacheable。

@cacheable 示例

XYCMS建站系统php版1.4
XYCMS建站系统php版1.4

XYCMS建站系统PHP版非MVC框架,自己手写原生态普通代码,作为企业用,已经绰绰有余。软件运行效率中等,加入数据缓存后性能提高。假如用来学习,下载可以慢慢研究的,假如用来建站,可以选择购买商业版就行建站用。栏目类别:文章,人员信息,专题项目,招聘,下载,相册,单页【支持无限极分类】文章:可用作添加新闻,资讯,列表信息类栏目信息人员信息:可用作企业员工信息栏目内容添加或者维护专题项目:可用作企业

下载

在方法上使用@cacheable将结果存储在缓存中。以下是使用获取用户数据的服务的示例:

@service
public class userservice {

    @cacheable(value = "users", key = "#userid")
    public user getuserbyid(long userid) {
        // simulate a costly operation, like a database call
        simulateslowservice();
        return new user(userid, "john doe");
    }

    private void simulateslowservice() {
        try {
            thread.sleep(3000); // simulate a 3-second delay
        } catch (interruptedexception e) {
            throw new illegalstateexception(e);
        }
    }
}

在这个例子中,getuserbyid方法被缓存,通过userid将用户对象存储在“users”缓存中。使用相同 userid 的后续调用将返回缓存的值,从而绕过simulateslowservice() 延迟。

使用@cacheput和@cacheevict

@cacheput:更新缓存而不跳过方法执行。
@cacheevict:从缓存中删除一个条目,对于保持缓存数据新鲜很有用。
例如,更新或删除用户时使用@cacheevict:

@cacheevict(value = "users", key = "#userid")
public void deleteuser(long userid) {
    // code to delete user from the database
}

缓存策略
为了充分利用缓存,选择正确的缓存策略至关重要。以下是一些需要考虑的方法:

1. 生存时间 (ttl) 缓存

配置缓存条目的 ttl,使其在设定的时间段后自动过期。这可以防止过时的数据在缓存中徘徊,这对于频繁更新的数据特别有用。

在 redis 中,您可以在配置中按如下方式设置 ttl:

@Bean
public RedisCacheConfiguration cacheConfiguration() {
    return RedisCacheConfiguration.defaultCacheConfig()
        .entryTtl(Duration.ofMinutes(10)) // Set TTL for 10 minutes
        .disableCachingNullValues();
}

2. 缓存端模式

在此模式中,应用程序在从数据库检索数据之前检查缓存。如果在缓存中找不到数据(“缓存未命中”),它将从数据库中获取、缓存结果并返回。这是一种常见的方法,并且使用 @cacheable 实现起来很简单。

3. 直写式和后写式缓存

write-through:缓存与数据库同时更新。
write-behind:缓存立即更新,但数据库稍后批量更新。
当您希望缓存和数据库之间的数据保持一致时,这些方法非常有用。

监控缓存性能

监控缓存性能以确保其提供预期的好处至关重要。您可以跟踪缓存命中、未命中和逐出,以识别任何瓶颈。常用的监控工具包括:

  1. redis cli:实时监控 redis 缓存命中/未命中。
  2. spring boot actuator:公开缓存指标以进行监控和管理。
  3. prometheus 和 grafana:跟踪和可视化 redis 和 spring boot 指标。

要避免的常见缓存陷阱

  1. 缓存太多数据:缓存过大的数据可能会导致内存使用率过高,从而抵消性能提升。
  2. 不频繁访问:缓存很少访问的数据可能不值得,因为它不会显着减少检索时间。
  3. 过时数据问题:如果数据频繁更改,请设置 ttl 以避免提供过时的信息。

缓存是增强后端性能的强大工具,spring boot 使其易于实现。通过利用 @cacheable、@cacheevict 等缓存注释并使用合适的缓存策略,您可以显着缩短响应时间、降低服务器负载并改善整体用户体验。无论您使用 redis、ehcache 还是其他缓存提供程序,缓存对于任何高性能应用程序都是一个有价值的补充。

开始在 spring boot 应用程序中尝试缓存,并观察性能的提高!

相关文章

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
spring框架介绍
spring框架介绍

本专题整合了spring框架相关内容,想了解更多详细内容,请阅读专题下面的文章。

115

2025.08.06

Java Spring Security 与认证授权
Java Spring Security 与认证授权

本专题系统讲解 Java Spring Security 框架在认证与授权中的应用,涵盖用户身份验证、权限控制、JWT与OAuth2实现、跨站请求伪造(CSRF)防护、会话管理与安全漏洞防范。通过实际项目案例,帮助学习者掌握如何 使用 Spring Security 实现高安全性认证与授权机制,提升 Web 应用的安全性与用户数据保护。

37

2026.01.26

spring boot框架优点
spring boot框架优点

spring boot框架的优点有简化配置、快速开发、内嵌服务器、微服务支持、自动化测试和生态系统支持。本专题为大家提供spring boot相关的文章、下载、课程内容,供大家免费下载体验。

135

2023.09.05

spring框架有哪些
spring框架有哪些

spring框架有Spring Core、Spring MVC、Spring Data、Spring Security、Spring AOP和Spring Boot。详细介绍:1、Spring Core,通过将对象的创建和依赖关系的管理交给容器来实现,从而降低了组件之间的耦合度;2、Spring MVC,提供基于模型-视图-控制器的架构,用于开发灵活和可扩展的Web应用程序等。

390

2023.10.12

Java Spring Boot开发
Java Spring Boot开发

本专题围绕 Java 主流开发框架 Spring Boot 展开,系统讲解依赖注入、配置管理、数据访问、RESTful API、微服务架构与安全认证等核心知识,并通过电商平台、博客系统与企业管理系统等项目实战,帮助学员掌握使用 Spring Boot 快速开发高效、稳定的企业级应用。

70

2025.08.19

Java Spring Boot 4更新教程_Java Spring Boot 4有哪些新特性
Java Spring Boot 4更新教程_Java Spring Boot 4有哪些新特性

Spring Boot 是一个基于 Spring 框架的 Java 开发框架,它通过 约定优于配置的原则,大幅简化了 Spring 应用的初始搭建、配置和开发过程,让开发者可以快速构建独立的、生产级别的 Spring 应用,无需繁琐的样板配置,通常集成嵌入式服务器(如 Tomcat),提供“开箱即用”的体验,是构建微服务和 Web 应用的流行工具。

35

2025.12.22

Java Spring Boot 微服务实战
Java Spring Boot 微服务实战

本专题深入讲解 Java Spring Boot 在微服务架构中的应用,内容涵盖服务注册与发现、REST API开发、配置中心、负载均衡、熔断与限流、日志与监控。通过实际项目案例(如电商订单系统),帮助开发者掌握 从单体应用迁移到高可用微服务系统的完整流程与实战能力。

180

2025.12.24

什么是分布式
什么是分布式

分布式是一种计算和数据处理的方式,将计算任务或数据分散到多个计算机或节点中进行处理。本专题为大家提供分布式相关的文章、下载、课程内容,供大家免费下载体验。

330

2023.08.11

C++ 设计模式与软件架构
C++ 设计模式与软件架构

本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。

8

2026.01.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
进程与SOCKET
进程与SOCKET

共6课时 | 0.4万人学习

Redis+MySQL数据库面试教程
Redis+MySQL数据库面试教程

共72课时 | 6.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号