Spring Boot 缓存

1. 缓存介绍

缓存相当于一个临时存储器,当我们想从数据库中拿取数据时,无需一直从数据库拿取,只需拿取一次之后把数据存入到缓存中,之后便可直接从缓存中拿数据,能大大提高数据的读取速度

2. Spring Boot 实现缓存

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);
	}
}

Spring Boot 常用缓存注解

以打印日志方案为例:

/**
 * 商品服务类
 */
@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 属性对应的缓存内容

3. SpringBoot 缓存框架

Spring Boot 默认的缓存实现比较简单,功能也十分有限。如果是企业级的中大型应用,需要寻求更加稳定、可靠的缓存框架。比较流行的缓存框架有:redis(现主流)、ehcahe。

3.1 Spring Boot 整合 Ehcache

Ehcache 是一个纯Java进程内的缓存框架,,是Hibernate中默认的CacheProvider,具备两级缓存数据——内存和磁盘,因此不必担心内存容量问题。另外 Ehcache 缓存的数据会在 JVM 重启时自动加载,不必担心断电丢失缓存的问题。

但因为Ehcache现在并不是主流的缓存框架,因此有个了解即可,不做过多介绍,现主流的是使用Redis。

3.2 Spring Boot 整合 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

4. 总结

Spring Boot 支持多种缓存实现方式,可以根据项目需求灵活选择。

缓存数据量较小的项目,可以使用 Spring Boot 默认缓存。
缓存数据量较大的项目,可以考虑使用 Ehcache 缓存框架。
如果是大型系统,对缓存的依赖性比较高,还是建议采用独立的缓存组件 Redis ,通过主备、集群等形式提高缓存服务的性能和稳定性。(也是现在主流缓存方式)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值