高性能缓存!使用Spring Boot轻松集成Memcached

👨‍🎓作者:bug菌

✏️博客:CSDN、掘金、infoQ、51CTO等

🎉简介:CSDN | 阿里云 | 华为云 | 51CTO等社区博客专家,历届博客之星Top30,掘金年度人气作者Top40,51CTO年度博主Top12,掘金 | InfoQ | 51CTO等社区优质创作者,全网粉丝合计15w+ ;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板等海量资料。

...

✍️温馨提醒:本文字数:7099字, 阅读完需:约 5 分钟

🏆本文收录于《Spring Boot从入门到精通》,专门攻坚指数提升。

本专栏致力打造最硬核 Spring Boot 从零基础到进阶系列学习内容,🚀均为全网独家首发,打造精品专栏,专栏持续更新中...欢迎大家订阅持续学习。

js 复制代码
环境说明:Windows10 + Idea2021.3.2 + Jdk1.8 + SpringBoot 2.3.1.RELEASE

1. 前言🔥

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

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

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 文件中添加以下依赖:

java 复制代码
        <!--集成Memcached-->
        <dependency>
            <groupId>com.googlecode.xmemcached</groupId>
            <artifactId>xmemcached</artifactId>
            <version>2.4.5</version>
        </dependency>

4.3 配置 Memcached

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

java 复制代码
spring:
  memcached:
    servers: localhost:11211
    expiration: 3600

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

4.4 使用 Memcached

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

java 复制代码
@Autowired
private MemcachedClient memcachedClient;

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

java 复制代码
@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private MemcachedClient memcachedClient;

    @Override
    public 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), 5*60, user);
            }
        }
        return user;
    }
}

4.5 方法使用说明

4.5.1 获取MemcachedClient对象

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

java 复制代码
private MemcachedClient memcachedClient;

4.5.2 存储数据

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

java 复制代码
memcachedClient.set("name", 300, "Tom");

4.5.3 获取数据

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

java 复制代码
String name = (String) memcachedClient.get("name");

4.5.4 删除数据

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

java 复制代码
memcachedClient.delete("name");

代码演示如下:

java 复制代码
// 存储数据
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 值、条件等等,具体配置详见官方文档。

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

java 复制代码
    /**
     * 查询缓存用户
     */
    @Cacheable(value = "user",key = "#id")
    @Override
    public 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 对象 及结合项目数据库分别演示一下。

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

java 复制代码
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class MemcachedTest {

    @Autowired
    private MemcachedClient memcachedClient;


    @Test
    public void testMemcachedAdd() throws InterruptedException, TimeoutException, MemcachedException {
        // 存储数据
        memcachedClient.set("key", 0, "value", 3600);
        assertNull(memcachedClient.get("key"));
    }

    @Test
    public 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 应用程序的性能,特别是在高并发环境下。

... ...

ok,以上就是我这期的全部内容啦,如果还想学习更多,你可以看看如下的往期热文推荐哦,每天积累一个奇淫小知识,日积月累下去,你一定能成为令人敬仰的大佬。

「赠人玫瑰,手留余香」,咱们下期拜拜~~

5. 热文推荐💭

若想学习更多,可以参考这篇专栏总结《2023最新首发,全网最全 Spring Boot 学习宝典(附思维导图)》本专栏致力打造最硬核 Spring Boot 进阶系列学习内容,🚀均为全网独家首发,打造精品专栏,专栏持续更新中。欢迎大家订阅持续学习。

在入门及进阶之途,我必助你一臂之力,系统性学习,从入门到精通,带你不走弯路,直奔终点;投资自己,永远性价比最高,都这么说了,你还不赶紧来学??

本文涉及所有源代码,均已上传至github开源,供同学们一对一参考 GitHub传送门

同时,原创开源不易,欢迎给个star🌟,想体验下被🌟的感jio,非常感谢❗

6. 文末💭

我是bug菌,CSDN | 阿里云 | 华为云 | 51CTO 等社区博客专家,历届博客之星Top30,掘金年度人气作者Top40,51CTO年度博主Top12,掘金 | InfoQ | 51CTO等社区优质创作者,全网粉丝合计15w+ ;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板等海量资料。

相关推荐
荆州克莱2 分钟前
Big Data for AI实践:面向AI大模型开发和应用的大规模数据处理套件
spring boot·spring·spring cloud·css3·技术
代码小鑫11 分钟前
A031-基于SpringBoot的健身房管理系统设计与实现
java·开发语言·数据库·spring boot·后端
Json____16 分钟前
学法减分交管12123模拟练习小程序源码前端和后端和搭建教程
前端·后端·学习·小程序·uni-app·学法减分·驾考题库
monkey_meng36 分钟前
【Rust类型驱动开发 Type Driven Development】
开发语言·后端·rust
落落落sss44 分钟前
MQ集群
java·服务器·开发语言·后端·elasticsearch·adb·ruby
我救我自己44 分钟前
UE5运行时创建slate窗口
java·服务器·ue5
2401_853275731 小时前
ArrayList 源码分析
java·开发语言
爪哇学长1 小时前
SQL 注入详解:原理、危害与防范措施
xml·java·数据库·sql·oracle
大鲤余1 小时前
Rust,删除cargo安装的可执行文件
开发语言·后端·rust
她说彩礼65万1 小时前
Asp.NET Core Mvc中一个视图怎么设置多个强数据类型
后端·asp.net·mvc