layering-cache是一个支持分布式环境的多级缓存框架,使用方式和spring-cache类似,主要目的是在使用注解的时候支持配置过期时间。
layering-cache其实是一个两级缓存,一级缓存使用Caffeine作为本地缓存,二级缓存使用redis作为集中式缓存。并且基于redis的Pub/Sub做缓存的删除,所以它是一个适用于分布式环境下的一个缓存系统。
集成 Spring 4.x
<dependency> <groupId>com.github.xiaolyuh</groupId> <artifactId>layering-cache-aspectj</artifactId> <version>${layering.version}</version> </dependency>
compile 'com.github.xiaolyuh:layering-cache:${layering.version}'
声明RedisTemplate
如果项目中没有声明RedisTemplate Bean 可以参考下面链接 声明RedisTemplate
声明CacheManager和LayeringAspect
/** * 多级缓存配置 * * @author yuhao.wang3 */ @Configuration @EnableAspectJAutoProxy public class CacheConfig { @Bean public CacheManager cacheManager(RedisTemplate<String, Object> redisTemplate) { return new LayeringCacheManager(redisTemplate); } @Bean public LayeringAspect layeringAspect() { return new LayeringAspect(); } }
集成 Spring Boot
引入layering-cache 就可以了
<dependency> <groupId>com.github.xiaolyuh</groupId> <artifactId>layering-cache-starter</artifactId> <version>${layering.version}</version> </dependency>
注解形式
直接在需要缓存的方法上加上Cacheable、CacheEvict、CachePut注解。
@Cacheable(value = "user:info", depict = "用户信息缓存", ttfirstCache = @FirstCache(expireTime = 4, timeUnit = TimeUnit.SECONDS), ttsecondaryCache = @SecondaryCache(expireTime = 10, preloadTime = 3, forceRefresh = true, timeUnit = TimeUnit.SECONDS)) public User getUser(User user) { tlogger.debug("调用方法获取用户名称"); treturn user; }
@CachePut(value = "user:info", key = "#userId", depict = "用户信息缓存", ttfirstCache = @FirstCache(expireTime = 4, timeUnit = TimeUnit.SECONDS), ttsecondaryCache = @SecondaryCache(expireTime = 10, preloadTime = 3, forceRefresh = true, timeUnit = TimeUnit.SECONDS)) public User putUser(long userId) { tUser user = new User(); tuser.setUserId(userId); tuser.setAge(31); tuser.setLastName(new String[]{"w", "y", "h"}); treturn user; }
@CacheEvict(value = "user:info", key = "#userId") public void evictUser(long userId) { } @CacheEvict(value = "user:info", allEntries = true) public void evictAllUser() { }
更多使用方法可以查看官方文档
https://gitee.com/xiaolyuh/layering-cache