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电子书籍、简历模板等硬核资源