layering-cache

layering-cache是一个支持分布式环境的多级缓存框架,使用方式和spring-cache类似,主要目的是在使用注解的时候支持配置过期时间。

layering-cache其实是一个两级缓存,一级缓存使用Caffeine作为本地缓存,二级缓存使用redis作为集中式缓存。并且基于redis的Pub/Sub做缓存的删除,所以它是一个适用于分布式环境下的一个缓存系统。

支持

  • 支持缓存监控统计
  • 支持缓存过期时间在注解上直接配置
  • 支持二级缓存的自动刷新(当缓存命中并发现缓存将要过期时会开启一个异步线程刷新缓存)
  • 刷新缓存分为强刷新和软刷新,强刷新直接调用缓存方法,软刷新直接改缓存的时间
  • 缓存Key支持SpEL表达式
  • 新增FastJsonRedisSerializer,KryoRedisSerializer序列化,重写String序列化。
  • 支持同一个缓存名称设置不同的过期时间
  • 输出INFO级别的监控统计日志
  • 二级缓存是否允许缓存NULL值支持配置
  • 二级缓存空值允许配置时间倍率

快速开始

集成 Spring 4.x

  1. 引入layering-cache
  • maven 方式
<dependency><groupId>com.github.xiaolyuh</groupId><artifactId>layering-cache-aspectj</artifactId><version>${layering.version}</version>
</dependency>
  • gradle 方式
compile 'com.github.xiaolyuh:layering-cache:${layering.version}'

声明RedisTemplate

如果项目中没有声明RedisTemplate Bean 可以参考下面链接 声明RedisTemplate

声明CacheManager和LayeringAspect

/*** 多级缓存配置** @author yuhao.wang3*/
@Configuration
@EnableAspectJAutoProxy
public class CacheConfig {@Beanpublic CacheManager cacheManager(RedisTemplate<String, Object> redisTemplate) {return new LayeringCacheManager(redisTemplate);}@Beanpublic 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注解
@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注解
@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注解
@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

layering-cache相关推荐

  1. SpringBoot 集成 layering-cache 实现两级缓存调研与实践

    前言 对于系统查多改少的数据,可以通过缓存来提升系统的访问性能.一般情况下我们会采用 Redis ,但是如果仅仅依赖 Redis 很容易出现缓存雪崩的情况.为了防止缓存雪崩可以通过 Redis 高可用 ...

  2. CPU Cache原理与示例

    CPU Cache原理与示例 基础知识 现在的 CPU 多核技术,都会有几级缓存,老的 CPU 会有两级内存(L1 和 L2),新的CPU会有三级内存(L1,L2,L3 ),如下图所示: 其中:  ...

  3. Cache Memory技术示例

    Cache Memory技术示例 为什么需要cache?如何判断一个数据在cache中是否命中?cache的种类有哪些,区别是什么? 为什么需要cache memory 先思考第一个问题:程序是如何运 ...

  4. Cache 与Memory架构及数据交互

    Cache 与Memory架构及数据交互

  5. 什么是L1/L2/L3 Cache?

    什么是L1/L2/L3 Cache? Cache Memory也被称为Cache,是存储器子系统的组成部分,存放着程序经常使用的指令和数据,这就是Cache的传统定义.从广义的角度上看,Cache是快 ...

  6. 微软BI 之SSIS 系列 - Lookup 组件的使用与它的几种缓存模式 - Full Cache, Partial Cache, NO Cache...

    开篇介绍 先简单的演示一下使用 Lookup 组件实现一个简单示例 - 从数据源表 A 中导出数据到目标数据表 B,如果 A 数据在 B 中不存在就插入新数据到B,如果存在就更新B 和 A 表数据保持 ...

  7. Curator Cache

    1.Curator Cache 与原生ZooKeeper Wacher区别 原生的ZooKeeper Wacher是一次性的:一个Wacher一旦触发就会被移出,如果你想要反复使用Wacher,就要在 ...

  8. 动态更新 AGS Cache

    作者:Flyingis 提升ArcGIS Server访问速度最佳的方式是Cache,将所有图层切片保存在服务器,客户端请求时直接访问cache好的图片,这里分为两种情况,一是所有图层都做cache, ...

  9. Bqq服务器的缓存文件放什么目录,如何使文件系统缓存失效? - How to invalidate the file system cache? - 开发者知识库...

    30 At least on Windows 7, it seems that attempting to open a volume handle without FILE_SHARE_WRITE ...

  10. cache.config配置文件解读

    这个是cdn配置缓存策略的文件,可以改变指定对象或是对象集的缓存参数cacheing paremeters 该文件默认存放在/usr/local/etc/trafficserver/,它定义了Traf ...

最新文章

  1. nginx+tomcat配置负载均衡集群
  2. 济南python工资一般多少钱-济南Python人工智能编程
  3. Django:模型model和数据库mysql(一)
  4. 第 16 章 反射(Reflection)
  5. phpshe b2c商城系统配置nginx支持pathinfo和rewrite的写法
  6. 00后感兴趣的“微醺生意”,居然被这位70后老兵做成功了?
  7. MongoDB服务无法启动,原因居然是...
  8. 前端 == Ajax
  9. Tomcat 在mac上(Idea)端口冲突解决办法
  10. mysql5.7非源码版msi安装教程
  11. c语言编程怎么记,新手如何学习c语言
  12. ERP管理web后台_数字化、智能化工厂管理系统原型、erp生产管理、仓库管理、采购管理、设备能源管理、计划管理、数字化工厂erp管理系统、生产计划、采购计划、用料请领、产品bom、工序管理、车间设备
  13. Ionic 创建打包项目
  14. java jpg转换tif_JAVA 实现jpg/tif/bmp 等图片之间格式得互相转换
  15. N-gram 特征提取
  16. 时间序列平稳性检验—R语言KPSS检验
  17. Processing——码绘与手绘对比动态篇
  18. OJ---腐烂的橘子
  19. photoshop--色彩管理
  20. 数十亿红包,正谋杀我们的春节

热门文章

  1. 举例说明事务隔离级别
  2. String,char,数组,列表 相互转化 (更新中)
  3. python遍历目录下所有文件_Python递归遍历目录下所有文件
  4. java 反射 找不到方法_Java获取反射的三种方法
  5. 详解 nginx 配置文件及构建 web 虚拟主机
  6. java tomcat jndi,Tomcat JNDI 资源
  7. python3android版_Android QPython3 简易 SL4A 服务:android.py
  8. 综合应用能力计算机类考什么用,综合应用能力考什么内容
  9. 华工网络计算机电路基础作业,2021年《计算机电路基础》-华工网络教育学院平时作业.doc...
  10. 限制服务器访问指定网站,如何允许或限制某一国或地区的用户访问网站