请先关注 [低调大师] 公众号 优秀的自媒体个人博客,低调大师,许军

低调大师

您现在的位置是:首页>文章详情

文章详情

SpringBoot2 项目缓存从 Redis 切换到 j2cache

2018-09-28 192热度

首先添加依赖,此处有坑。刚开始添加的是 <artifactId>j2cache-spring-boot-starter</artifactId>,一直报错,后来发现springboot2工程需要使用 <artifactId>j2cache-spring-boot2-starter</artifactId>.

<dependency> <groupId>net.oschina.j2cache</groupId> <artifactId>j2cache-spring-boot2-starter</artifactId> <version>2.7.0-release</version> <exclusions> <exclusion> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> </exclusion> </exclusions> </dependency> 

之前配置的缓存管理器及缓存RedisTemplate等工具都是基于Redis、Jedis的,使用了j2cache的starter后,之前的缓存配置基本上已经没有用了,需要注释掉。

之前加的spring-session-data-redis,也需要去掉或者使用使用j2cache作为缓存,也可以切换到j2cache的session方案(暂时没有尝试)。

 <dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId> </dependency> 

原cache工具类:

@Component("redisCacheUtil") public class RedisCacheUtilImpl<T> implements RedisCacheUtil<T> { @Autowired CacheManager cacheManager; } 

修改后:

@Component("redisCacheUtil") @ConditionalOnClass(J2CacheAutoConfiguration.class) @AutoConfigureAfter(J2CacheCacheManger.class) public class RedisCacheUtilImpl<T> implements RedisCacheUtil<T> { private static final Logger log = LoggerFactory.getLogger(RedisCacheUtilImpl.class); @Autowired J2CacheCacheManger cacheManager; } 

这里可能会报cacheManager Could not autowire,没关系,不影响。

springboot项目天生可以区分运行环境,我们可以使用j2cache-${spring.profiles.active}.properties来引用不同环境的配置。在application.yml中配置增加:

spring: cache: type: none // 原先使用redis,现在改为none j2cache: config-location: /j2cache-${spring.profiles.active}.properties redis-client: lettuce open-spring-cache: true 

我们使用的redis-client为lettuce,并开启spring cache。 在j2cache.properties中,我们重点针对性修改配置:

// 广播策略 j2cache.broadcast = net.oschina.j2cache.cache.support.redis.SpringRedisPubSubPolicy // 一级缓存使用caffeine j2cache.L1.provider_class = caffeine // 二级缓存使用lettuce,和redis-client对应 j2cache.L2.provider_class = lettuce // L2配置 j2cache.L2.config_section = redis // redis缓存序列化方式,不建议配置为json,如果父类和子类有同样的属性(id),在序列化的json中会出现两个id属性,其中一个为空。使用fastjson没有此问题。另外,本人认为使用json序列化比类序列化更好,可以做到更好的反序列化兼容。 j2cache.serialization = fastjson // caffeine的配置文件位置,缓存数量及超时时间可以在里面配置 caffeine.properties = /caffeine.properties 
收藏 (0)

相关文章

    文章评论

    共有0条评论来说两句吧...