likes
comments
collection
share

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

作者站长头像
站长
· 阅读数 40

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

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

环境说明:Windows10 + Idea2021.3.2 + Jdk1.8 + SpringBoot 2.3.1.RELEASE

1. 前言🔥

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

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

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

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应用

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:11211
    expiration: 3600

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

4.4 使用 Memcached

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


@Autowired
private MemcachedClient memcachedClient;

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

@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


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")
    @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 对象 及结合项目数据库分别演示一下。

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

@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. 热文推荐💭

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

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

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

6. 文末💭

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

转载自:https://juejin.cn/post/7276282877330915369
评论
请登录