赞
踩
缓存相当于一个临时存储器,当我们想从数据库中拿取数据时,无需一直从数据库拿取,只需拿取一次之后把数据存入到缓存中,之后便可直接从缓存中拿数据,能大大提高数据的读取速度。
Spring Boot 实现缓存步骤如下:
第一步:引入依赖
<!-- Web 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 缓存依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
第二步:在启动类上添加注解 @EnableCaching 开启缓存功能。
@SpringBootApplication
@EnableCaching // 开启缓存
public class SpringBootCacheApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootCacheApplication.class, args);
}
}
以打印日志方案为例:
/**
* 商品服务类
*/
@Service
@CacheConfig(cacheNames = "GoodsCache")
public class GoodsService {
private Logger logger = LoggerFactory.getLogger(this.getClass());
/**
* 按id获取商品信息
*/
@Cacheable
public GoodsDo getById(Long id) {
logger.info("getById({})", id);
GoodsDo goods = new GoodsDo();
goods.setId(id);
goods.setName("goods-" + id);
return goods;
}
/**
* 删除商品
*/
@CacheEvict(key = "#id")
public void remove(Long id) {
logger.info("remove({})", id);
}
/**
* 编辑商品信息
*/
@CachePut(key = "#goods.id")
public GoodsDo edit(GoodsDo goods) {
logger.info("edit id:{}", goods.getId());
return goods;
}
}
其中:
@CacheConfig:注解用于指定本类中方法使用的缓存名称,该类使用的缓存名称为 GoodsCache ,与其他缓存区域是隔离的。
@Cacheable :用于开启方法缓存,缓存的键是方法的参数,缓存的值是方法的返回值。
(如果多次调用该方法时参数 id 值相同,则第一次会执行方法体,并将返回值放入缓存;后续方法不会再执行方法体,直接将缓存的值返回)
@CachePut: 可以更新缓存,key = “#id” 表示采用参数中的 id 属性作为键。当缓存中该键的值不存在时,则将返回值放入缓存;当缓存中该键的值已存在时,会更新缓存的内容。
@CacheEvict: 可以移除缓存,当调用该方法时,会移除 goods 中 id 属性对应的缓存内容
Spring Boot 默认的缓存实现比较简单,功能也十分有限。如果是企业级的中大型应用,需要寻求更加稳定、可靠的缓存框架。比较流行的缓存框架有:redis(现主流)、ehcahe。
Ehcache 是一个纯Java进程内的缓存框架,,是Hibernate中默认的CacheProvider,具备两级缓存数据——内存和磁盘,因此不必担心内存容量问题。另外 Ehcache 缓存的数据会在 JVM 重启时自动加载,不必担心断电丢失缓存的问题。
但因为Ehcache现在并不是主流的缓存框架,因此有个了解即可,不做过多介绍,现主流的是使用Redis。
因为Ehcache 是 纯Java 进程内的缓存框架,因此会受限于 JVM 整体的内存分配策略。
如果是大型系统,缓存的数据量特别大,且性能要求很高,可以考虑直接使用 Redis 作为缓存。
Redis 可以采用单机、主备、集群等模式,视乎具体项目需求决定即可。目前各大云计算厂商均提供商用版的 Redis 缓存服务,性能卓越且接入简单快速。
现以单机为例:
第一步:引入依赖
<!-- Web 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 缓存依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<!-- Redis 相关依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
第二步:添加缓存配置
# 过期时间
spring.cache.redis.time-to-live=6000s
# Redis库的编号
spring.redis.database=0
# Redis实例地址
spring.redis.host=127.0.0.1
# Redis实例端口号,默认6379
spring.redis.port=6379
# Redis登录密码
spring.redis.password=Easy@0122
# Redis连接池最大连接数
spring.redis.jedis.pool.max-active=10
# Redis连接池最大空闲连接数
spring.redis.jedis.pool.max-idle=10
# Redis连接池最小空闲连接数
spring.redis.jedis.pool.min-idle=0
Spring Boot 支持多种缓存实现方式,可以根据项目需求灵活选择。
缓存数据量较小的项目,可以使用 Spring Boot 默认缓存。
缓存数据量较大的项目,可以考虑使用 Ehcache 缓存框架。
如果是大型系统,对缓存的依赖性比较高,还是建议采用独立的缓存组件 Redis ,通过主备、集群等形式提高缓存服务的性能和稳定性。(也是现在主流缓存方式)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。