这篇文章给大家分享的是有关SpringBoot+SpringCache实现两级缓存的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
springboot一种全新的编程规范,其设计目的是用来简化新Spring应用的初始搭建以及开发过程,SpringBoot也是一个服务于框架的框架,服务范围是简化配置文件。
Spring cache:主要包含spring cache定义的接口方法说明和注解中的属性说明
springboot+spring cache:rediscache实现中的缺陷
caffeine简介
spring boot+spring cache实现两级缓存
使用缓存时的流程图
spring cache是spring-context包中提供的基于注解方式使用的缓存组件,定义了一些标准接口,通过实现这些接口,就可以通过在方法上增加注解来实现缓存。这样就能够避免缓存代码与业务处理耦合在一起的问题。spring cache的实现是使用spring aop中对方法切面(MethodInterceptor)封装的扩展,当然spring aop也是基于Aspect来实现的。
spring cache核心的接口就两个:Cache和CacheManager
1.2.1 Cache接口
提供缓存的具体操作,比如缓存的放入,读取,清理,spring框架中默认提供的实现有
1.2.2 CacheManager接口
主要提供Cache实现bean的创建,每个应用里可以通过cacheName来对Cache进行隔离,每个CaheName对应一个Cache实现,spring框架中默认提供的实现与Cache的实现都是成对出现的
1.2.3 常用的注解说明
@Cacheable:主要应用到查询数据的方法上
@CacheEvict:清除缓存,主要应用到删除数据的方法上
@CachePut:放入缓存,主要用到对数据有更新的方法上
@Caching:用于在一个方法上配置多种注解
@EnableCaching:启用spring cache缓存,作为总的开关,在spring boot的启动类或配置类上需要加入次注解才会生效
package com.xfgg.demo.config;
import lombok.AllArgsConstructor;
import com.github.benmanes.caffeine.cache.Caffeine;
import org.springframework.cache.CacheManager;
import org.springframework.cache.caffeine.CaffeineCacheManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.concurrent.TimeUnit;
@Configuration
@AllArgsConstructor
//把定义的缓存加入到Caffeine中
public class CacheConfig {
@Bean
public CacheManager cacheManager(){
CaffeineCacheManager cacheManager = new CaffeineCacheManager();
cacheManager.setCaffeine(Caffeine.newBuilder()
//使用refreshAfterWrite必须要设置cacheLoader
//在5分钟内没有创建/覆盖时,会移除该key,下次取的时候从loading中取【重点:失效、移除Key、失效后需要获取新值】
.expireAfterWrite(5, TimeUnit.MINUTES)
//初始容量
.initialCapacity(10)
//用来控制cache的最大缓存数量
.maximumSize(150)
);
return cacheManager;
}
}
package com.xfgg.demo.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.RedisPassword;
import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;
//生成的redis连接
public class RedisConfig<GenericObjectPoolConfig> {
@Value("${spring.redis1.host}")
private String host;
@Value("${spring.redis1.port}")
private Integer port;
@Value("${spring.redis1.password}")
private String password;
@Value("${spring.redis1.database}")
private Integer database;
@Value("${spring.redis1.lettuce.pool.max-active}")
private Integer maxActive;
@Value("${spring.redis1.lettuce.pool.max-idle}")
private Integer maxIdle;
@Value("${spring.redis1.lettuce.pool.max-wait}")
private Long maxWait;
@Value("${spring.redis1.lettuce.pool.min-idle}")
private Integer minIdle;
@Bean
public RedisStandaloneConfiguration redis1RedisConfig() {
RedisStandaloneConfiguration config = new RedisStandaloneConfiguration();
config.setHostName(host);
config.setPassword(RedisPassword.of(password));
config.setPort(port);
config.setDatabase(database);
return config;
}
//配置序列化器
@Bean
public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory factory){
RedisTemplate<String,Object>template=new RedisTemplate<>();
//关联
template.setConnectionFactory(factory);
//设置key的序列化器
template.setKeySerializer(new StringRedisSerializer());
//设置value的序列化器
template.setValueSerializer(new StringRedisSerializer());
return template;
}
}
一个使用cacheable注解,一个使用redistemplate进行缓存
感谢各位的阅读!关于“SpringBoot+SpringCache实现两级缓存的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。