👨🎓作者: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电子书籍、简历模板等海量资料。