一、前言
当系统的访问量增大时,相应的数据库的性能就逐渐下降。但是,大多数请求都是在重复的获取相同的数据,如果使用缓存,将结果数据放入其中可以很大程度上减轻数据库的负担,提升系统的响应速度。
本篇将介绍 Spring Boot 中缓存和 NoSQL 的使用。上篇文章《Spring Boot 入门之持久层篇(三)》。
二、整合缓存
Spring Boot 针对不同的缓存技术实现了不同的封装,本篇主要介绍 EhCache 和 Redis 缓存。
Spring Boot 提供了以下几个注解实现声明式缓存:
注解 | 说明 |
---|---|
@EnableCaching | 开启缓存功能,放在配置类或启动类上 |
@CacheConfig | 缓存配置,设置缓存名称 |
@Cacheable | 执行方法前先查询缓存是否有数据。有则直接返回缓存数据;否则查询数据再将数据放入缓存 |
@CachePut | 执行新增或更新方法后,将数据放入缓存中 |
@CacheEvict | 清除缓存 |
@Caching | 将多个缓存操作重新组合到一个方法中 |
2.1 EhCache 缓存
2.1.1 添加依赖
1 | 复制代码<dependency> |
2.1.2 添加配置
在 src/main/resources 目录下创建 ehcache.xml 文件,内容如下:
1 | 复制代码<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
application.properties :
1 | 复制代码spring.cache.type=ehcache |
2.1.3 编码
在持久层篇的基础上,结合 Mybatis 测试:
Service 层:
1 | 复制代码@CacheConfig(cacheNames = "department") |
控制层:
1 | 复制代码@Controller |
启动类:
添加 @EnableCaching 注解,开启缓存功能。
1 | 复制代码@EnableCaching |
2.1.4 测试说明
1) 发起保存请求:
1 | 复制代码保存 id=2 的数据 |
2) 保存成功后,立刻发起查询请求,没有日志打印,但返回对象数据,说明数据是从缓存中获取。
3) 发起修改请求:
1 | 复制代码修改 id=2 的数据 |
4) 修改成功后,立刻发起查询请求,没有日志打印,但返回修改后的对象数据,说明缓存中的数据已经同步。
5) 发起删除请求:
1 | 复制代码删除 id=2 的数据 |
6) 删除成功后,立刻发起查询请求,控制台打印 sql 语句,说明缓存数据被删除,需要查询数据库。
1 | 复制代码获取 id=2 的数据 |
2.2 Redis 缓存
2.2.1 添加依赖
1 | 复制代码<dependency> |
2.2.2 添加配置
application.properties :
1 | 复制代码spring.redis.host=192.168.2.11 |
注意:spring.cache.type=redis,缓存类型设置成 redis。
完成上边 2 个步骤后,其他步骤与测试 Ehcache 时的步骤一致。
测试结果也一致,此处省略。
三、整合 Redis
上一个小节其实已经介绍了 Spring Boot 整合 Redis 的内容。
在添加 redis 依赖包启动项目后,Spring Boot 会自动配置 RedisCacheManger 和 RedisTemplate 的 Bean。如果开发者不想使用 Spring Boot 写好的 Redis 缓存,而是想使用其 API 自己实现缓存功能、消息队列或分布式锁之类的需求时,可以继续往下浏览。
Spring Data Redis 为我们提供 RedisTemplate 和 StringRedisTemplate 两个模板进行数据操作,它们主要 的访问方法如下:
方法 | 说明 |
---|---|
opsForValue() | 操作简单属性的数据 |
opsForList() | 操作含有 list 的数据 |
opsForSet() | 操作含有 set 的数据 |
opsForZSet() | 操作含有 zset 的数据 |
opsForHash() | 操作含有 hash 的数据 |
3.1 添加依赖
1 | 复制代码<dependency> |
3.2 配置连接
1 | 复制代码spring.redis.host=192.168.2.11 |
3.3 编码
1 | 复制代码@Component |
3.4 测试
1 | 复制代码@RunWith(SpringRunner.class) |
测试结果省略…
四、整合 MongoDB
Spring Data MongoDB 提供了 MongoTemplate 模板 和 Repository 让开发者进行数据访问。
4.1 添加依赖
1 | 复制代码<dependency> |
4.2 配置连接
1 | 复制代码spring.data.mongodb.host=192.168.2.25 |
4.3 编码
4.3.1 使用 MongoTemplate
1 | 复制代码@Component |
4.3.2 使用 Repository
1 | 复制代码public interface UserRepository extends MongoRepository<User, Integer> { |
测试方式与 Redis 测试大同小异,测试结果省略…
五、参考资料
本文转载自: 掘金