layering-cache
layering-cache
layering-cache是一个支持分布式环境的多级缓存框架,使用方式和spring-cache类似,主要目的是在使用注解的时候支持配置过期时间。
layering-cache其实是一个两级缓存,一级缓存使用Caffeine作为本地缓存,二级缓存使用redis作为集中式缓存。并且基于redis的Pub/Sub做缓存的删除,所以它是一个适用于分布式环境下的一个缓存系统。
支持
- 支持缓存监控统计
- 支持缓存过期时间在注解上直接配置
- 支持二级缓存的自动刷新(当缓存命中并发现缓存将要过期时会开启一个异步线程刷新缓存)
- 刷新缓存分为强刷新和软刷新,强刷新直接调用缓存方法,软刷新直接改缓存的时间
- 缓存Key支持SpEL表达式
- 新增FastJsonRedisSerializer,KryoRedisSerializer序列化,重写String序列化。
- 支持同一个缓存名称设置不同的过期时间
- 输出INFO级别的监控统计日志
- 二级缓存是否允许缓存NULL值支持配置
- 二级缓存空值允许配置时间倍率
快速开始
集成 Spring 4.x
- 引入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相关推荐
- SpringBoot 集成 layering-cache 实现两级缓存调研与实践
前言 对于系统查多改少的数据,可以通过缓存来提升系统的访问性能.一般情况下我们会采用 Redis ,但是如果仅仅依赖 Redis 很容易出现缓存雪崩的情况.为了防止缓存雪崩可以通过 Redis 高可用 ...
- CPU Cache原理与示例
CPU Cache原理与示例 基础知识 现在的 CPU 多核技术,都会有几级缓存,老的 CPU 会有两级内存(L1 和 L2),新的CPU会有三级内存(L1,L2,L3 ),如下图所示: 其中: ...
- Cache Memory技术示例
Cache Memory技术示例 为什么需要cache?如何判断一个数据在cache中是否命中?cache的种类有哪些,区别是什么? 为什么需要cache memory 先思考第一个问题:程序是如何运 ...
- Cache 与Memory架构及数据交互
Cache 与Memory架构及数据交互
- 什么是L1/L2/L3 Cache?
什么是L1/L2/L3 Cache? Cache Memory也被称为Cache,是存储器子系统的组成部分,存放着程序经常使用的指令和数据,这就是Cache的传统定义.从广义的角度上看,Cache是快 ...
- 微软BI 之SSIS 系列 - Lookup 组件的使用与它的几种缓存模式 - Full Cache, Partial Cache, NO Cache...
开篇介绍 先简单的演示一下使用 Lookup 组件实现一个简单示例 - 从数据源表 A 中导出数据到目标数据表 B,如果 A 数据在 B 中不存在就插入新数据到B,如果存在就更新B 和 A 表数据保持 ...
- Curator Cache
1.Curator Cache 与原生ZooKeeper Wacher区别 原生的ZooKeeper Wacher是一次性的:一个Wacher一旦触发就会被移出,如果你想要反复使用Wacher,就要在 ...
- 动态更新 AGS Cache
作者:Flyingis 提升ArcGIS Server访问速度最佳的方式是Cache,将所有图层切片保存在服务器,客户端请求时直接访问cache好的图片,这里分为两种情况,一是所有图层都做cache, ...
- 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 ...
- cache.config配置文件解读
这个是cdn配置缓存策略的文件,可以改变指定对象或是对象集的缓存参数cacheing paremeters 该文件默认存放在/usr/local/etc/trafficserver/,它定义了Traf ...
最新文章
- nginx+tomcat配置负载均衡集群
- 济南python工资一般多少钱-济南Python人工智能编程
- Django:模型model和数据库mysql(一)
- 第 16 章 反射(Reflection)
- phpshe b2c商城系统配置nginx支持pathinfo和rewrite的写法
- 00后感兴趣的“微醺生意”,居然被这位70后老兵做成功了?
- MongoDB服务无法启动,原因居然是...
- 前端 == Ajax
- Tomcat 在mac上(Idea)端口冲突解决办法
- mysql5.7非源码版msi安装教程
- c语言编程怎么记,新手如何学习c语言
- ERP管理web后台_数字化、智能化工厂管理系统原型、erp生产管理、仓库管理、采购管理、设备能源管理、计划管理、数字化工厂erp管理系统、生产计划、采购计划、用料请领、产品bom、工序管理、车间设备
- Ionic 创建打包项目
- java jpg转换tif_JAVA 实现jpg/tif/bmp 等图片之间格式得互相转换
- N-gram 特征提取
- 时间序列平稳性检验—R语言KPSS检验
- Processing——码绘与手绘对比动态篇
- OJ---腐烂的橘子
- photoshop--色彩管理
- 数十亿红包,正谋杀我们的春节
热门文章
- 举例说明事务隔离级别
- String,char,数组,列表 相互转化 (更新中)
- python遍历目录下所有文件_Python递归遍历目录下所有文件
- java 反射 找不到方法_Java获取反射的三种方法
- 详解 nginx 配置文件及构建 web 虚拟主机
- java tomcat jndi,Tomcat JNDI 资源
- python3android版_Android QPython3 简易 SL4A 服务:android.py
- 综合应用能力计算机类考什么用,综合应用能力考什么内容
- 华工网络计算机电路基础作业,2021年《计算机电路基础》-华工网络教育学院平时作业.doc...
- 限制服务器访问指定网站,如何允许或限制某一国或地区的用户访问网站