网站怎么提升实用性/免费百度seo引流

网站怎么提升实用性,免费百度seo引流,装企工长网站开发,微信订阅号 网站开发在 Spring Boot 应用中,缓存是提升性能的重要手段之一。为了更方便地使用缓存,我们可以设计一套通用的本地缓存工具类,封装常见的缓存操作,简化开发流程。本文将详细介绍如何设计并实现一套 Spring Boot 本地缓存工具类&#xff0…

在 Spring Boot 应用中,缓存是提升性能的重要手段之一。为了更方便地使用缓存,我们可以设计一套通用的本地缓存工具类,封装常见的缓存操作,简化开发流程。本文将详细介绍如何设计并实现一套 Spring Boot 本地缓存工具类,并提供完整代码示例。


1. 工具类设计目标

在设计缓存工具类时,我们需要考虑以下目标:

  1. 通用性:工具类应支持多种缓存操作,如获取、添加、更新、删除等。
  2. 易用性:通过简单的 API 调用即可完成缓存操作,减少重复代码。
  3. 灵活性:支持自定义缓存过期时间、缓存键生成策略等。
  4. 可扩展性:工具类应易于扩展,支持不同的缓存实现(如 Caffeine、Guava 等)。

2. 工具类实现

2.1 添加依赖

首先,在 pom.xml 中添加 Spring Boot 缓存支持的依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency><groupId>com.github.ben-manes.caffeine</groupId><artifactId>caffeine</artifactId>
</dependency>

2.2 启用缓存

在 Spring Boot 启动类上添加 @EnableCaching 注解,启用缓存功能:

@SpringBootApplication
@EnableCaching
public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}
}

2.3 缓存工具类实现

以下是一个通用的本地缓存工具类实现,基于 Spring 的 CacheManager 和 Caffeine 缓存库:

package com.example.cache;import org.springframework.cache.Cache;
import org.springframework.cache.CacheManager;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;import javax.annotation.Resource;
import java.util.concurrent.Callable;/*** 本地缓存工具类*/
@Component
public class LocalCacheUtil {@Resourceprivate CacheManager cacheManager;/*** 获取缓存值** @param cacheName 缓存名称* @param key       缓存键* @return 缓存值*/public <T> T get(String cacheName, Object key) {Cache cache = getCache(cacheName);if (cache != null) {Cache.ValueWrapper valueWrapper = cache.get(key);if (valueWrapper != null) {return (T) valueWrapper.get();}}return null;}/*** 获取缓存值,如果不存在则通过 loader 加载** @param cacheName 缓存名称* @param key       缓存键* @param loader    缓存加载器* @return 缓存值*/public <T> T get(String cacheName, Object key, Callable<T> loader) {Cache cache = getCache(cacheName);if (cache != null) {return cache.get(key, loader);}return null;}/*** 添加缓存** @param cacheName 缓存名称* @param key       缓存键* @param value     缓存值*/public void put(String cacheName, Object key, Object value) {Cache cache = getCache(cacheName);if (cache != null) {cache.put(key, value);}}/*** 删除缓存** @param cacheName 缓存名称* @param key       缓存键*/public void evict(String cacheName, Object key) {Cache cache = getCache(cacheName);if (cache != null) {cache.evict(key);}}/*** 清空缓存** @param cacheName 缓存名称*/public void clear(String cacheName) {Cache cache = getCache(cacheName);if (cache != null) {cache.clear();}}/*** 获取缓存对象** @param cacheName 缓存名称* @return 缓存对象*/private Cache getCache(String cacheName) {if (!StringUtils.hasText(cacheName)) {throw new IllegalArgumentException("缓存名称不能为空");}return cacheManager.getCache(cacheName);}
}

3. 工具类使用示例

3.1 配置缓存

application.yml 中配置 Caffeine 缓存:

spring:cache:type: caffeinecaffeine:spec: maximumSize=1000,expireAfterWrite=10m

3.2 使用工具类

在业务代码中,可以通过注入 LocalCacheUtil 来使用缓存工具类:

@Service
public class BookService {@Resourceprivate LocalCacheUtil localCacheUtil;/*** 获取书籍信息*/public Book getBookById(Long id) {// 先从缓存中获取Book book = localCacheUtil.get("books", id);if (book == null) {// 如果缓存中不存在,则从数据库加载book = loadBookFromDatabase(id);// 将结果放入缓存localCacheUtil.put("books", id, book);}return book;}/*** 更新书籍信息*/public void updateBook(Book book) {// 更新数据库updateBookInDatabase(book);// 更新缓存localCacheUtil.put("books", book.getId(), book);}/*** 删除书籍信息*/public void deleteBookById(Long id) {// 删除数据库记录deleteBookFromDatabase(id);// 删除缓存localCacheUtil.evict("books", id);}// 模拟从数据库加载书籍信息private Book loadBookFromDatabase(Long id) {// 这里模拟数据库查询return new Book(id, "Spring Boot Guide", "Author Name");}// 模拟更新数据库private void updateBookInDatabase(Book book) {// 这里模拟数据库更新}// 模拟删除数据库记录private void deleteBookFromDatabase(Long id) {// 这里模拟数据库删除}
}

4. 工具类的优势

  1. 简化缓存操作:通过工具类封装,业务代码中只需调用简单的方法即可完成缓存操作。
  2. 统一管理缓存:所有缓存操作都通过工具类进行,便于维护和扩展。
  3. 支持多种缓存策略:可以通过配置灵活调整缓存过期时间、最大容量等参数。
  4. 易于扩展:如果需要切换缓存实现(如从 Caffeine 切换到 Ehcache),只需修改配置,无需改动业务代码。

5. 总结

本文设计并实现了一套 Spring Boot 本地缓存工具类,通过封装 Spring 的 CacheManager 和 Caffeine 缓存库,提供了简单易用的缓存操作 API。该工具类可以显著简化缓存的使用,提升开发效率,同时具备良好的扩展性和灵活性。希望本文能帮助你更好地理解和使用 Spring Boot 中的本地缓存功能。

如果你有任何问题或建议,欢迎在评论区留言讨论!

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

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

相关文章

引领变革!北京爱悦诗科技有限公司荣获“GAS消费电子科创奖-产品创新奖”!

在2025年“GAS消费电子科创奖”评选中&#xff0c;北京爱悦诗科技有限公司提交的“aigo爱国者GS06”&#xff0c;在技术创新性、设计创新性、工艺创新性、智能化创新性及原创性五大维度均获得评委的高度认可&#xff0c;荣获“产品创新奖”。 这一奖项不仅是对爱悦诗在消费电子…

考研英语语法全攻略:从基础到长难句剖析​

引言 在考研英语的备考之旅中,语法犹如一座灯塔,为我们在浩瀚的英语知识海洋中指引方向。无论是阅读理解中复杂长难句的解读,还是写作时准确流畅表达的需求,扎实的语法基础都起着至关重要的作用。本文将结合有道考研语法基础入门课的相关内容,为大家全面梳理考研英语语法…

【JavaWeb12】数据交换与异步请求:JSON与Ajax的绝妙搭配是否塑造了Web的交互革命?

文章目录 &#x1f30d;一. 数据交换--JSON❄️1. JSON介绍❄️2. JSON 快速入门❄️3. JSON 对象和字符串对象转换❄️4. JSON 在 java 中使用❄️5. 代码演示 &#x1f30d;二. 异步请求--Ajax❄️1. 基本介绍❄️2. JavaScript 原生 Ajax 请求❄️3. JQuery 的 Ajax 请求 &a…

前端杂的学习笔记

什么是nginx Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器 Nginx是一款轻量级的Web 服务器/反向代理服务器&#xff0c;处理高并发能力是十分强大的&#xff0c;并且支持热部署&#xff0c;启动简单&#xff0c;可以做到7*24不间断运行 正代和反代 学习nginx&a…

玩转ChatGPT:GPT 深入研究功能

一、写在前面 民间总结&#xff1a; 理科看Claude 3.7 Sonnet 文科看DeepSeek-R1 那么&#xff0c;ChatGPT呢&#xff1f; 看Deep Research&#xff08;深入研究&#xff09;功能。 对于科研狗来说&#xff0c;在这个文章爆炸的时代&#xff0c;如何利用AI准确、高效地收…

RabbitMQ 2025/3/5

高性能异步通信组件。 同步调用 以支付为例&#xff1a; 可见容易发生雪崩。 异步调用 以支付为例&#xff1a; 支付服务当甩手掌柜了&#xff0c;不管后面的几个服务的结果。只管库库发&#xff0c;后面那几个服务想取的时候就取&#xff0c;因为消息代理里可以一直装&#x…

Android15使用FFmpeg解码并播放MP4视频完整示例

效果: 1.编译FFmpeg库: 下载FFmpeg-kit的源码并编译生成安装平台库 2.复制生成的FFmpeg库so文件与包含目录到自己的Android下 如果没有prebuiltLibs目录,创建一个,然后复制 包含目录只复制arm64-v8a下

Hadoop、Hive、Spark的关系

Part1&#xff1a;Hadoop、Hive、Spark关系概览 1、MapReduce on Hadoop 和spark都是数据计算框架&#xff0c;一般认为spark的速度比MR快2-3倍。 2、mapreduce是数据计算的过程&#xff0c;map将一个任务分成多个小任务&#xff0c;reduce的部分将结果汇总之后返回。 3、HIv…

[密码学实战]Java实现国密TLSv1.3单向认证

一、代码运行结果 1.1 运行环境 1.2 运行结果 1.3 项目架构 二、TLS 协议基础与国密背景 2.1 TLS 协议的核心作用 TLS(Transport Layer Security) 是保障网络通信安全的加密协议,位于 TCP/IP 协议栈的应用层和传输层之间,提供: • 数据机密性:通过对称加密算法(如 AE…

09 HarmonyOS NEXT 仿uv-ui Tag组件开发教程系列(三)

温馨提示&#xff1a;本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦&#xff01; 文章目录 Tag组件实战应用与最佳实践1. 复杂场景应用1.1 标签筛选系统 2. 性能优化实践2.1 状态管理优化2.2 渲染性能优化 3. 实用功能扩展3.1 拖拽…

clickhouse查询效率低

《关于ClickHouse查询效率低的探讨》 在数据处理的世界里&#xff0c;数据库扮演着至关重要的角色。ClickHouse是一款专为在线分析处理&#xff08;OLAP&#xff09;设计的列式存储数据库管理系统。它因其快速的数据写入和查询速度而闻名&#xff0c;尤其适合处理海量数据。如…

Linux系统基于ARM平台的LVGL移植

软硬件介绍&#xff1a;Ubuntu 20.04 ARM 和&#xff08;Cortex-A53架构&#xff09;开发板 基本原理 LVGL图形库是支持使用Linux系统的Framebuffer帧缓冲设备实现的&#xff0c;如果想要实现在ARM开发板上运行LVGL图形库&#xff0c;那么就需要把LVGL图形库提供的关于帧缓冲设…

旋转编码器原理与应用详解:从结构到实战 | 零基础入门STM32第四十七步

主题内容教学目的/扩展视频旋转编码器电路原理&#xff0c;跳线设置&#xff0c;结构分析。驱动程序与调用。熟悉电路和驱动程序。 师从洋桃电子&#xff0c;杜洋老师 &#x1f4d1;文章目录 一、旋转编码器是什么&#xff1f;二、内部结构揭秘2.1 机械组件解剖2.2 核心部件说明…

aws(学习笔记第三十二课) 深入使用cdk(API Gateway + event bridge)

文章目录 aws(学习笔记第三十二课) 深入使用cdk学习内容&#xff1a;1. 使用aws API Gatewaylambda1.1. 以前的练习1.2. 使用cdk创建API Gateway lambda1.3. 确认cdk创建API Gateway lambda 2. 使用event bridge练习producer和consumer2.1. 代码链接2.2. 开始练习2.3. 代码部…

城市霓虹灯夜景拍照后期Lr调色教程,手机滤镜PS+Lightroom预设下载!

调色教程 在城市霓虹灯夜景拍摄中&#xff0c;由于现场光线复杂等因素&#xff0c;照片可能无法完全呈现出当时的视觉感受。通过 Lr 调色&#xff0c;可以弥补拍摄时的不足。例如&#xff0c;运用基本调整面板中的曝光、对比度、阴影等工具&#xff0c;可以处理出画面的整体明暗…

自然语言处理:文本分类

介绍 大家好&#xff0c;我这个热衷于分享知识的博主又来啦&#xff01;之前我们一起深入探讨了自然语言处理领域中非常重要的两个方法&#xff1a;朴素贝叶斯和逻辑斯谛回归。在探索的过程中&#xff0c;我们剖析了朴素贝叶斯如何基于概率原理和特征条件独立假设&#xff0c;…

K8S高可用集群-小白学习之二进制部署(ansible+shell)

一.K8S高可用集群配置概述 序言:本文从一个小白的视角进行K8S的研究和部署,采用二进制的方式是为了更清楚了分解部署流程及了解这个集群是怎么运作的,加上ansible+shell是方便在这个过程中,遇到了问题,我们可以不断的快速重复部署来测试和研究问题的所在点,本文的架构图…

【编译器】VSCODE搭建ESP32-C3

【编译器】VSCODE搭建ESP32-C3 文章目录 [TOC](文章目录) 前言一、下载配置二、编译三、烧录四、参考资料总结 前言 使用工具&#xff1a; 1. 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、下载配置 安装IDF&#xff0c;打开例程 二、编译 三…

通义千问本地配置并实现微调

通义千问本地配置并实现微调 最小Qwen模型大小942mb from modelscope import snapshot_download model_dir = snapshot_download(“qwen/Qwen2.5-0.5B”, cache_dir=“./models2.5”) Qwen2.5-0.5B:942MB from modelscope import snapshot_download model_dir = snapshot_d…

Magento2根据图片文件包导入产品图片

图片包给的图片文件是子产品的图片&#xff0c;如下图&#xff1a;A104255是主产品的sku <?php/*** 根据图片包导入产品图片&#xff0c;包含子产品和主产品* 子产品是作为主图&#xff0c;主产品是作为附加图片*/use Magento\Framework\App\Bootstrap;include(../app/boot…