Spring Boot进阶(67):高性能缓存!使用Spring Boot轻松集成Memcached。

news/2024/11/27 23:31:52/

1. 前言🔥

        Memcached是一款高性能的分布式内存对象缓存系统,主要用于动态Web应用中减轻数据库负载。Spring Boot是一款基于Spring框架的快速开发框架,集成了大量的常用技术和组件,方便开发者快速搭建项目。将两者结合起来,可以提高Web应用的性能,并减少数据库的压力。本文将介绍如何在Spring Boot中集成Memcached,并实现对缓存的读写操作。

        那么,具体如何实现呢?这将又会是干货满满的一期,全程无尿点不废话只抓重点教,具有非常好的学习效果,拿好小板凳准备就坐!希望学习的过程中大家认真听好好学,学习的途中有任何不清楚或疑问的地方皆可评论区留言或私信,bug菌将第一时间给予解惑,那么废话不多说,直接开整!Fighting!! 

<div align="center"><img width="250" height="" src="https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/ab1c5eef582546459bf8e943e1ac103f~tplv-k3u1fbpfcp-zoom-1.image"></div>
 

2. 环境说明🔥

本地的开发环境:

  • 开发工具:IDEA 2021.3
  • JDK版本: JDK 1.8
  • Spring Boot版本:2.3.1 RELEASE
  • Maven版本:3.8.2

3. Memcached🔥

3.1 简介

        Memcached 是一款高性能的分布式内存对象缓存系统,可以用来缓存 SQL 查询结果、API 调用结果、网页数据等等。使用 Memcached 可以减少对数据库的查询次数,提高系统的性能。

        Memcached 是基于键值对(key-value)的缓存系统,每个缓存数据都对应一个唯一的键(key)。可以使用 Memcached 客户端 API 对缓存进行设置、获取、删除等操作。

3.2 使用介绍

        Memcached 可以将任意类型的数据存储到内存中,并提供快速读取和写入操作。它通常被用于缓存数据库查询结果、API 调用结果、静态文件等。Memcached 基于键值对存储,每个键对应一个唯一的值,可以通过键来查询和更新值。

3.3 安装与配置

  • 下载和安装 Memcached:可以从 Memcached 官网 下载适合自己系统的版本。下载后,解压文件并执行安装命令即可。
  • 启动 Memcached:执行 memcached 命令,启动服务,默认监听 11211 端口。
  • 配置 Memcached:通过 -m 参数设置可用内存大小,通过 -p 参数设置监听端口,通过 -l 参数设置监听地址等。

3.4 常用命令

  • set:存储数据,set key 0 0 expire_time_in_seconds value。
  • get:获取数据,get key。
  • delete:删除数据,delete key。
  • incr:增加一个值,incr key increment_value。
  • decr:减少一个值,decr key decrement_value。

更多详细信息可以参考 Memcached 官方文档。

4. Spring Boot 集成 Memcached 

4.1 搭建Spring Boot应用

首先,我们先创建个基础的Spring Boot项目,如果还不会点这里,此处就不详细赘述啦。

4.2 添加依赖

在 pom.xml 文件中添加以下依赖:

        <!--集成Memcached--><dependency><groupId>com.googlecode.xmemcached</groupId><artifactId>xmemcached</artifactId><version>2.4.5</version></dependency>

4.3 配置 Memcached

在 application-dev.yaml 配置文件中添加以下配置:

spring:memcached:servers: localhost:11211expiration: 3600

注意:其中 spring.memcached.servers 配置了 Memcached 服务器的地址和端口,spring.memcached.expiration 配置了数据的默认过期时间(单位为秒)。

4.4 使用 Memcached

        在需要使用 Memcached 的地方,注入MemcachedClient对象即可:

@Autowired
private MemcachedClient memcachedClient;

        然后就可以通过 memcachedClient 对象来进行数据的读写操作了,例如:

@Service
public class UserServiceImpl implements UserService {@Autowiredprivate MemcachedClient memcachedClient;@Overridepublic User getUserById(int id) {User user = (User) memcachedClient.get(String.valueOf(id));if (user == null) {// 从数据库中获取用户user = userDao.getUserById(id);if (user != null) {// 将用户对象缓存到Memcached中,缓存时间为5分钟memcachedClient.set(String.valueOf(id), 300, user);}}return user;}
}

4.5 方法使用说明

4.5.1 获取MemcachedClient对象

        在需要使用Memcached的类中,使用@Autowired注解将MemcachedClient对象注入。

@Autowired

private MemcachedClient memcachedClient;

4.5.2 存储数据

        使用set()方法可以将数据存储到Memcached中,第一个参数是键,第二个参数是数据,第三个参数是缓存时间(单位为秒)。

memcachedClient.set("name", 300, "Tom");

4.5.3 获取数据

使用get()方法可以从Memcached中获取数据,参数为要获取的数据的键。

String name = (String) memcachedClient.get("name");

4.5.4 删除数据

使用delete()方法可以从Memcached中删除数据,参数为要删除的数据的键。

memcachedClient.delete("name");

代码演示如下: 

// 存储数据
memcachedClient.set("key", 0, "value", 3600);
// 获取数据
String value = (String) memcachedClient.get("key");
// 删除数据
memcachedClient.delete("key");

4.5.6 使用 Spring提供的注解

        或者你也可以使用 Spring 提供的@Cacheable、@CachePut、@CacheEvict等注解来指定使用 Memcached 缓存,例如:

  • @Cacheable:表示将方法的返回值存储到缓存中;
  • @CachePut:表示将方法的返回值更新到缓存中;
  • @CacheEvict:表示删除缓存中的数据;
  • @Caching:表示同时使用多种缓存操作;

这些注解可以指定缓存的名称、key 值、条件等等,具体配置详见官方文档。

例如,获取用户信息时,可以这样定义方法:

    /*** 查询缓存用户*/@Cacheable(value = "user",key = "#id")@Overridepublic UserEntity findUserById(Integer id) {UserEntity user = this.getById(id);log.info("为key(id)为{}的数据做了缓存", user.getId());return user;}

        上面的代码中,@Cacheable 注解指定使用缓存名为 user,键为传入的参数 id。如果缓存中已经存在对应的键值对,则直接返回缓存数据,否则执行方法中的代码(),并将返回结果缓存起来。

4.6 测试用例

        为了测试 Memcached 是否成功集成到 Spring Boot 中,我们可以编写一个简单的测试用例来进行验证,如下我分别通过memcachedClient 对象 及结合项目数据库分别演示一下。

        测试用例代码如下,仅供参考:

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class MemcachedTest {@Autowiredprivate MemcachedClient memcachedClient;@Testpublic void testMemcachedAdd() throws InterruptedException, TimeoutException, MemcachedException {// 存储数据memcachedClient.set("key", 0, "value", 3600);assertNull(memcachedClient.get("key"));}@Testpublic void testMemcachedDelete() throws InterruptedException, TimeoutException, MemcachedException {// 获取数据String value = (String) memcachedClient.get("key");assertEquals("value", value);// 删除数据memcachedClient.delete("key");assertNull(memcachedClient.get("key"));}}

        运行测试用例,第一次运行会查询数据库并将结果缓存到 Memcached 中,再次运行时会直接从缓存中读取数据,加快了查询速度。如果所有测试都通过,则说明 Memcached 已经成功集成到了 Spring Boot 中。

4.7 小结

        通过本文,我们了解了 Memcached 的基本用法以及如何在 Spring Boot 中集成 Memcached,并编写了一个简单的测试用例来验证集成结果。使用 Memcached 可以有效提升 Web 应用程序的性能,特别是在高并发环境下。

5. 热文推荐🔥

滴~如下推荐【Spring Boot 进阶篇】的学习大纲,请小伙伴们注意查收。

Spring Boot进阶(01):Spring Boot 集成 Redis,实现缓存自由

Spring Boot进阶(02):使用Validation进行参数校验

Spring Boot进阶(03):如何使用MyBatis-Plus实现字段的自动填充

Spring Boot进阶(04):如何使用MyBatis-Plus快速实现自定义sql分页

Spring Boot进阶(05):Spring Boot 整合RabbitMq,实现消息队列服务

Spring Boot进阶(06):Windows10系统搭建 RabbitMq Server 服务端

Spring Boot进阶(07):集成EasyPoi,实现Excel/Word的导入导出

Spring Boot进阶(08):集成EasyPoi,实现Excel/Word携带图片导出

Spring Boot进阶(09):集成EasyPoi,实现Excel文件多sheet导入导出

Spring Boot进阶(10):集成EasyPoi,实现Excel模板导出成PDF文件

Spring Boot进阶(11):Spring Boot 如何实现纯文本转成.csv格式文件?

Spring Boot进阶(12):Spring Boot 如何获取Excel sheet页的数量?

Spring Boot进阶(13):Spring Boot 如何获取@ApiModelProperty(value = “序列号“, name = “uuid“)中的value值name值?

Spring Boot进阶(14):Spring Boot 如何手动连接库并获取指定表结构?一文教会你

Spring Boot进阶(15):根据数据库连接信息指定分页查询表结构信息

Spring Boot进阶(16):Spring Boot 如何通过Redis实现手机号验证码功能?

Spring Boot进阶(17):Spring Boot如何在swagger2中配置header请求头等参数信息

Spring Boot进阶(18):SpringBoot如何使用@Scheduled创建定时任务?

Spring Boot进阶(19):Spring Boot 整合ElasticSearch

Spring Boot进阶(20):配置Jetty容器

Spring Boot进阶(21):配置Undertow容器

Spring Boot进阶(22):Tomcat与Undertow容器性能对比分析

Spring Boot进阶(23):实现文件上传

Spring Boot进阶(24):如何快速实现多文件上传?

Spring Boot进阶(25):文件上传的单元测试怎么写?

Spring Boot进阶(26):Mybatis 中 resultType、resultMap详解及实战教学

Spring Boot进阶(27):Spring Boot 整合 kafka(环境搭建+演示)

Spring Boot进阶(28):Jar包Linux后台启动部署及滚动日志查看,日志输出至实体文件保存

Spring Boot进阶(29):如何正确使用@PathVariable,@RequestParam、@RequestBody等注解?不会我教你,结合Postman演示

Spring Boot进阶(30):@RestController和@Controller 注解使用区别,实战演示

...

本项目源码地址:GitHub - luoyong0603/SpringBoot-demo: 该项目代码为《滚雪球学Spring Boot》《Spring Boot进阶实战》专栏知识点讲解案例及相关源码,开源给同学们参考。

6. 文末🔥

        如果想系统性的学习Spring Boot,小伙伴们直接订阅bug菌专门为大家创建的Spring Boot专栏《滚雪球学Spring Boot》从入门到精通,从无到有,从零到一!以知识点+实例+项目的学习模式由浅入深对Spring Boot框架进行学习&使用。

        如果你有一定的基础却又想精进Spring Boot,那么《Spring Boot进阶实战》将会是你的最好的选择;此栏进行知识点+实例+项目的学习方式全面深入框架剖析及各种高阶玩法,励志打造全网最全最新springboot学习专栏,投资学习自己性价比最高。

        本文涉及所有源代码,均已上传至github开源,供同学们一对一参考,GitHub,同时,原创开源不易,欢迎给个star🌟,想体验下被加Star的感jio,非常感谢 ❗

       我是bug菌,一名想走👣出大山改变命运的程序猿。接下来的路还很长,都等待着我们去突破、去挑战。来吧,小伙伴们,我们一起加油!未来皆可期,fighting!

关注公众号,获取最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板等硬核资源


http://www.ppmy.cn/news/1086797.html

相关文章

Python 获取函数参数类型,动态准备输入参数

在写代码的时候想到&#xff0c;如何动态的获取指定函数的参数类型&#xff0c;然后有针对性的准备参数呢&#xff1f;首先一个问题是如何获取到一个python模块里的参数以及它们的名字&#xff0c;这一点在我前端时间已经实现了 https://blog.csdn.net/qq_43199509/article/det…

java 面试题汇总整理

java有哪四种引用类型 在Java中&#xff0c;有四种引用类型&#xff0c;用于控制对象的生命周期和垃圾回收行为。这些引用类型包括&#xff1a; 强引用&#xff08;Strong Reference&#xff09;&#xff1a; 强引用是最常见的引用类型&#xff0c;它们是默认的引用类型。当一…

【写作秘书】emoji

&#x1f4cc;无用的知识 | 写作美秘 emoji markdown能写的表情有限&#xff0c;主要有时候我记不住一些词汇&#x1f440;:eyes:&#x1f448;这种猫猫狗狗一个单词的简单. 分享一个我常用的emoji网站 https://emojipedia.org/ 有时候文章码太长&#xff0c;除了字体颜色换换…

常量指针 指针常量 修饰常量

常量指针&#xff08;const修饰指针&#xff09; const int *p&a; int a 0, b 0;//常量指针&#xff1a;不能改变指向的值&#xff0c;可以改变指向。const int* p &a;cout << p << endl;p &b;cout << p << endl; 指针常量 &#xff…

前瞻|Java 21 新特性 String Templates(字符串模版)

在日常写Java的时候&#xff0c;对于字符串的操作是非常普遍的&#xff0c;其中最常见的就是对字符串的组织。也因为这个操作非常普遍&#xff0c;所以诞生了很多方案&#xff0c;总下来大概有这么几种&#xff1a; 使用拼接使用StringBuffer和SpringBuilderString::format an…

GaussDB数据库SQL系列-层次递归查询

目录 一、前言 二、GuassDB数据库层次递归查询概念 三、GaussDB数据库层次递归查询实验示例 1、创建实验表 2、sys_connect_by_path(col, separator) 3、connect_by_root(col) 4、WITH RECURSIVE 四、递归查询的优缺点 1、优点 2、缺点 五、总结 一、前言 层次递归…

什么是手术麻醉系统?

一、手术麻醉系统的主要作用 手术麻醉系统能更好、更准确地记录和管理手术与麻醉的临床信息&#xff0c;提高医生和麻醉师的工作效率。它主要用于病人手术与麻醉的申请、审批、安排&#xff0c;精确记录病人在手术过程中的术中医嘱、术中费用等信息&#xff0c;追踪生命体征等…

【上海迪士尼度假区】技术解决方案

开源平台地址Giteehttps://gitee.com/issavior/disney 技术解决方案 1. 背景2. 技术架构3. 业务架构3.1 架构图3.2 说明 4. 技术能力4.1 自研中间件4.2 定制化中间件 5. 领域模型6. 数据模型7. 交易链路8. 状态机8. 接口文档 1. 背景 上海迪士尼度假区已运营近10年&#xff0c…