当前位置: 首页 > news >正文

使用Spring Boot开发应用:基于请求参数MD5的缓存键及其他缓存方式

本文将介绍如何在Spring Boot应用中实现基于请求参数MD5的缓存键,以及其他常见的缓存方式。通过实际代码示例,展示如何应用这些技术优化系统性能。

1. 引入必要的依赖

首先,在Spring Boot项目中引入缓存相关的依赖。修改pom.xml文件,添加如下依赖:

<dependencies><!-- Spring Boot Starter Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Spring Boot Starter Cache --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId></dependency><!-- Optional: Spring Boot Starter Data Redis for Redis Cache --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>
</dependencies>

2. 配置缓存

application.properties中进行缓存配置。这里以内存缓存(如ConcurrentMapCacheManager)为例:

spring.cache.type=simple

如果使用Redis作为缓存,可以进行如下配置:

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

3. 启用缓存支持

在Spring Boot应用的主类或配置类上添加@EnableCaching注解:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;@SpringBootApplication
@EnableCaching
public class CacheApplication {public static void main(String[] args) {SpringApplication.run(CacheApplication.class, args);}
}

4. 计算请求参数的MD5作为缓存键

创建一个自定义缓存键生成器,计算请求参数的MD5值并作为缓存键:

import org.springframework.cache.interceptor.KeyGenerator;
import org.springframework.stereotype.Component;import java.lang.reflect.Method;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;@Component("customKeyGenerator")
public class CustomKeyGenerator implements KeyGenerator {@Overridepublic Object generate(Object target, Method method, Object... params) {try {// 将请求参数按一定顺序组合成字符串String paramStr = Arrays.stream(params).map(Object::toString).reduce((a, b) -> a + "&" + b).orElse("");// 计算MD5值MessageDigest md = MessageDigest.getInstance("MD5");byte[] hash = md.digest(paramStr.getBytes(StandardCharsets.UTF_8));// 转换为32位的哈希值StringBuilder hexString = new StringBuilder();for (byte b : hash) {hexString.append(String.format("%02x", b));}return hexString.toString();} catch (NoSuchAlgorithmException e) {throw new RuntimeException(e);}}
}

5. 应用缓存注解

在服务层应用缓存注解,使用自定义的缓存键生成器:

import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;@Service
public class MyService {@Cacheable(value = "myCache", keyGenerator = "customKeyGenerator")public String getData(String param1, String param2) {// 模拟耗时操作try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}return "Data from " + param1 + " and " + param2;}
}

6. 其他缓存方式

除了使用请求参数的MD5作为缓存键外,还可以采用其他缓存方式,如直接使用请求参数、组合多个参数等。示例如下:

6.1 直接使用请求参数作为缓存键


@Cacheable(value = "myCache", key = "#param1 + '-' + #param2")
public String getDataUsingParams(String param1, String param2) {// 模拟耗时操作try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}return "Data from " + param1 + " and " + param2;
}

6.2 组合多个参数作为缓存键

@Cacheable(value = "myCache", key = "T(String).valueOf(#param1).concat('-').concat(T(String).valueOf(#param2))")
public String getDataUsingCombinedParams(String param1, String param2) {// 模拟耗时操作try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}return "Data from " + param1 + " and " + param2;
}

相关文章:

使用Spring Boot开发应用:基于请求参数MD5的缓存键及其他缓存方式

本文将介绍如何在Spring Boot应用中实现基于请求参数MD5的缓存键&#xff0c;以及其他常见的缓存方式。通过实际代码示例&#xff0c;展示如何应用这些技术优化系统性能。 1. 引入必要的依赖 首先&#xff0c;在Spring Boot项目中引入缓存相关的依赖。修改pom.xml文件&#x…...

typescript中interface常见3种用法

文章目录 函数类型对象类型【自命名】&#xff1a; (函数)对象类型 函数类型 作用&#xff1a;声明一个函数接口&#xff1a;可用于类型声明 | 不可implements 对象类型 作用&#xff1a;声明对象具备哪些实例接口&#xff1a;可用于类型 | 可implements 【自命名】&…...

windows10 安装CUDA教程

如何在windows10系统上安装CUDA? 1、查看电脑的NVIDIA版本 nvidia-smi 2、官网下载所需CUDA版本 官网地址:https://developer.nvidia.com/cuda-toolkit-archive 我们所安装的CUDA版本需要小于等于本机电脑的NVIDIA版本。推荐使用迅雷下载,速度会更快哦。 3、安装步骤...

计算机毕业设计选题推荐-某炼油厂盲板管理系统-Java/Python项目实战

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…...

PSO求解函数最小值的MATLAB例程|MATLAB源代码

本篇文章适合PSO入门&#xff0c;进阶的可能会觉得太简单的。 目录 PSO例程作用运行结果代码函数解释 例程修改tips PSO Particle Swarm Optimization&#xff0c;粒子群优化算法&#xff0c;通过模拟鸟群或鱼群的行为来寻找最优解。在计算时通过对一群粒子的位置和速度进行迭…...

scrapy 爬取旅游景点相关数据(一)

配套视频可以前往B站&#xff1a;麦麦大数据 项目目标: 爬取的是穷游旅游景点列表 、评论数据 &#x1f4ca; 章节&#xff1a; &#x1f606; Scrapy 爬取旅游景点相关数据&#xff08;一&#xff09; &#x1f606; Scrapy 爬取旅游景点相关数据&#xff08;二&#xff09; &…...

构建铁塔基站安全防护网:视频AI智能监控技术引领智慧化转型

一、背景现状 随着通信技术的快速发展&#xff0c;铁塔基站作为重要的通信基础设施&#xff0c;其安全、稳定、高效的运行对于保障通信网络的畅通至关重要。然而&#xff0c;铁塔基站大多分布在公路边、高山、野外等区域&#xff0c;巡检难度大&#xff0c;维护效率低&#xf…...

Java中的分布式缓存:Ehcache与Hazelcast

Java中的分布式缓存&#xff1a;Ehcache与Hazelcast 大家好&#xff0c;我是微赚淘客系统3.0的小编&#xff0c;是个冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将深入探讨Java中的两种分布式缓存技术&#xff1a;Ehcache与Hazelcast。分布式缓存可以显…...

前端开发工程师的薪资,主要取决于哪3个方面?

作者&#xff1a;清水束竹 从2022年开始&#xff0c;互联网行业的就业情况就不容乐观了。 最明显的三个表现:裁员、缩招、降薪。 其实2021-2022年年中那段时间&#xff0c;互联网企业出现了一波假性繁荣。 某些大厂Q大量招聘应届毕业生&#xff0c;宣传铺天盖地&#xff0c;不…...

springboot美食网站—计算机毕业设计源码11574

摘 要 随着人们生活水平的提高&#xff0c;人们对美食的要求也越来越高&#xff0c;对各类美食信息需求越来越大。因此&#xff0c;结合计算机快速发展、普及&#xff0c;在此基础上制作一个页面简单、美观,功能实用的美食网站势在必行&#xff0c;满足用户分享美食的需求。 美…...

WordPress建站:如何使用ChemiCloud搭建外贸独立站

以前自行搭建一个网站&#xff0c;不懂一点技术那是很难完成的&#xff0c;现如今WordPress的出现极大地降低了搭建网站的技术门槛&#xff0c;不需要懂任何代码&#xff0c;只需按步骤操作就行。WordPress 是一个非常流行的开源内容管理系统&#xff08;CMS&#xff09;&#…...

在 Vim 编辑器中,如果某个单词被意外地高亮显示,使用:noh可以取消高亮显示

文章目录 1、问题出现的背景2、解决办法 1、问题出现的背景 配置镜像加速器&#xff0c;修改 /etc/docker/daemon.json 目录下的文件&#xff0c;不小心高亮显示https&#xff0c;产生问题的步骤是&#xff0c;我先是按esc键退出vim的编辑模式&#xff0c;然后在https的前面按…...

一条命令安装mysql,php

一条命令安装mysql&#xff0c;php&#xff0c;wget http://soft.vpser.net/lnmp/lnmp1.5.tar.gz -cO lnmp1.5.tar.gz && tar zxf lnmp1.5.tar.gz && cd lnmp1.5 && ./install.sh lnmp...

配置maven环境

一、把maven文件下载到D盘下 二、创建一个maven文件夹&#xff0c;并在其中创建一个repository文件夹 三、桌面右键单击属性设置&#xff0c;搜索环境 添加MAVEN HOME变量&#xff0c;让然后把apache-maven路径下的bin文件的路径复制进来 用记事本或者NotePad打开下图路径的set…...

飞书打卡 快捷指令

使用快捷指令定时飞书打卡 在网上找了一圈&#xff0c;只有钉钉打卡的快捷指令&#xff0c;但是公司换飞书&#xff0c;哪个打工人不怕忘记打卡呢&#xff0c;所以自己研究了一下&#xff0c;其实也很简单。 找url 问题的最关键是打开飞书的打卡界面 如果只是打开飞书APP 很…...

LeYOLO,一种用于目标检测的新型可扩展且高效的CNN架构

摘要 在目标检测中&#xff0c;深度神经网络的计算效率至关重要&#xff0c;尤其是随着新型模型越来越注重速度而非有效计算量&#xff08;FLOP&#xff09;。这一发展趋势在某种程度上忽视了嵌入式和面向移动设备的AI目标检测应用。在本文中&#xff0c;我们基于FLOP关注于高…...

docker安装phpMyAdmin

直接安装phpMyAdmin需要有php环境&#xff0c;比较麻烦&#xff0c;总结了使用docker安装方法&#xff0c;并提供docker镜像。 1.docker镜像 见我上传的docker镜像&#xff1a;https://download.csdn.net/download/taotao_guiwang/89595177 2.安装 1).加载镜像 docker load …...

举例详细学习和分析后端业务逻辑代码开发思路

在此之前&#xff0c;先来补充一下上一篇文章的一点内容&#xff1a;上一篇文章点击此处详看 对于画线的这句话&#xff0c;来详细解释一下吧&#xff01; 这里面说&#xff0c;对于service服务层&#xff0c;如果我们所需要实现的业务比较简单的话可以直接在...service接口里面…...

面试经典算法150题系列-数组/字符串操作之轮转数组

序言&#xff1a;今天是算法系列的第六题啦&#xff0c;无需多说&#xff0c;上题&#xff01; 轮转数组 给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3…...

苹果手机怎么录屏?一键操作,轻松掌握录屏技巧

最近新换了一台苹果手机&#xff0c;但苹果手机和安卓手机有挺多不相同的地方&#xff0c;就比如苹果手机怎么录屏我一直都没找到&#xff0c;有没有经常使用苹果手机的朋友可以帮帮我&#xff1f;先谢谢大家啦&#xff01;” 苹果手机作为全球领先的智能手机品牌&#xff0c;…...

计算机二级 WPS 文字题:样式调整考点 详细解析

计算机二级 WPS 文字题&#xff1a;样式调整考点 详细解析 这道题是WPS 文字 / Word 样式设置的高频必考题型&#xff0c;核心考点是「样式批量修改」和「分页控制」&#xff0c;我会把每一步的操作、考点和易错点都拆解清楚。 一、题目整体拆解 题目分为 3 个核心任务&#…...

Sixpack Redis数据存储策略:高效管理A/B测试数据的10个技巧

Sixpack Redis数据存储策略&#xff1a;高效管理A/B测试数据的10个技巧 【免费下载链接】sixpack Sixpack is a language-agnostic a/b-testing framework 项目地址: https://gitcode.com/gh_mirrors/si/sixpack Sixpack是一个语言无关的A/B测试框架&#xff0c;它通过R…...

终极LDDC歌词工具指南:如何快速获取完美同步的逐字歌词

终极LDDC歌词工具指南&#xff1a;如何快速获取完美同步的逐字歌词 【免费下载链接】LDDC 简单易用的精准歌词(逐字歌词/卡拉OK歌词)下载匹配工具|A simple and user-friendly tool for downloading and matching precise lyrics (word-by-word lyrics/Karaoke lyrics) 项目地…...

数分-MySQL基础01

数分-MySQL基础01基础概念MySQL数据库对象MySQL的架构MySQL客户端和服务器端连接方式命令行连接方式图形化客户端连接SQL语言分类通用语法&#xff08;所有数据库&#xff09;DDL语句数据库DDL数据表DDL表字段DDL数据类型字段约束基础概念 数据库&#xff08;Database, DB&…...

深度解析:光引擎、光模块、光器件之间的关系和区别?

随着AI大模型加速迭代&#xff0c;算力集群正从“千卡”向“万卡”“十万卡”规模迈进&#xff0c;光通信作为连接算力的“血管”&#xff0c;其内部层级关系变得愈发关键。然而&#xff0c;光器件、光模块、光引擎这三者并非同一概念&#xff0c;而是产业链中层层递进的“铁三…...

实战测试10款降AIGC平台:只选真正管用的那一款!

随着AI写作工具的普及&#xff0c;越来越多的学生和职场人士开始依赖它们来提升论文写作和内容创作的效率。然而&#xff0c;随着各大高校、期刊和平台对AIGC内容的检测越来越严格&#xff0c;原本便捷的工具却成了隐患。很多用户发现&#xff0c;自己精心撰写的内容被系统标记…...

学习大模型RAG与Agent智能体基础知识day1

开头 各位好啊&#xff01; 如你所见博主是个新手&#xff0c;新到这是我第一次发博客。 现在是2026.5.20的凌晨&#xff08;哦情人节到了…&#xff09;&#xff0c;前几周刚刚学完langchain的基础知识&#xff0c;跟着教程做了个前后端&#xff08;前端因为没学所以代码直接搬…...

番茄小说下载器终极指南:三步打造你的私人数字图书馆

番茄小说下载器终极指南&#xff1a;三步打造你的私人数字图书馆 【免费下载链接】fanqienovel-downloader 下载番茄小说 项目地址: https://gitcode.com/gh_mirrors/fa/fanqienovel-downloader 你是否曾在深夜追更小说时突然断网&#xff1f;或者想在地铁上继续阅读却发…...

树莓派5/4B新手开箱:用官方Raspberry Pi Imager工具10分钟完成系统部署

树莓派5/4B极速部署指南&#xff1a;官方Imager工具的全新工作流解析 第一次拿到树莓派5或4B时&#xff0c;很多用户会陷入传统部署方法的复杂流程中——下载镜像、格式化存储卡、烧录系统、手动配置网络……这些步骤不仅耗时&#xff0c;还容易因操作失误导致启动失败。而树莓…...

Wayback Machine 浏览器扩展:一键穿越互联网历史的终极免费工具

Wayback Machine 浏览器扩展&#xff1a;一键穿越互联网历史的终极免费工具 【免费下载链接】wayback-machine-webextension A web browser extension for Chrome, Firefox, Edge, and Safari 14. 项目地址: https://gitcode.com/gh_mirrors/wa/wayback-machine-webextension…...