当前位置: 首页 > news >正文

jetcache如果一个主体涉及多个缓存时编辑或者删除时如何同时失效多个缓存

在实际使用过程中,可能会遇到这种情形:一个主体会有多个缓存,比如用户基础信息缓存、用户详情缓存,那么当删除用户信息后就需要同时失效多个缓存中该主体数据,那么jetcache支持这种应用场景么,答案是支持,只需要使用多个@CacheInvalidate注解即可,示例代码如下所示:

    @Override@Cached(name = "user-cache", key = "#userId", expire = 10000, cacheType = CacheType.BOTH)public User loadUser(long userId) {User userInfo = new User();userInfo.setUserId(1);userInfo.setUserName("john");return userInfo;}@Cached(name = "user-cache2", key = "#userId", expire = 10000, cacheType = CacheType.BOTH)@Overridepublic UserInfo loadUser2(long userId) {UserInfo userInfo = new UserInfo();userInfo.setUserId(1);userInfo.setUserName("john");userInfo.setAddress("山东济宁");return userInfo;}// 同时失效多个缓存@CacheInvalidate(name = "user-cache", key = "#userId")@CacheInvalidate(name = "user-cache2", key = "#userId")@Overridepublic void delete(Long userId) {}

那么这种支持背后的代码是如何实现的呢,感兴趣的可以看下CacheHandler的

invokeWithInvalidateOrUpdate方法
    private static Object invokeWithInvalidateOrUpdate(CacheInvokeContext context) throws Throwable {Object originResult = invokeOrigin(context);context.setResult(originResult);CacheInvokeConfig cic = context.getCacheInvokeConfig();// 注意下面是@CacheInvalidate的多个配置if (cic.getInvalidateAnnoConfigs() != null) {doInvalidate(context, cic.getInvalidateAnnoConfigs());}CacheUpdateAnnoConfig updateAnnoConfig = cic.getUpdateAnnoConfig();if (updateAnnoConfig != null) {doUpdate(context, updateAnnoConfig);}return originResult;}private static void doInvalidate(CacheInvokeContext context, List<CacheInvalidateAnnoConfig> annoConfig) {// 配置几个CacheInvalidate注解就会失效几个缓存,但是Update操作却不支持,大家可以想下为什么?for (CacheInvalidateAnnoConfig config : annoConfig) {doInvalidate(context, config);}}

http://www.lryc.cn/news/305454.html

相关文章:

  • uni-app 实现拍照后给照片加水印功能
  • 【ArcGIS】利用DEM进行水文分析:流向/流量等
  • 论文阅读笔记——PathAFL:Path-Coverage Assisted Fuzzing
  • C语言中各种运算符用法
  • pythonJax小记(五):python: 使用Jax深度图像(正交投影和透视投影之间的转换)(持续更新,评论区可以补充)
  • web安全学习笔记【16】——信息打点(6)
  • 145.二叉树的后序遍历
  • ssh远程连接免密码访问
  • Vue-Json-Schema-Form: 如何基于模板定制前端页面
  • 保存Json对象到数据库
  • 《Docker 简易速速上手小册》第3章 Dockerfile 与镜像构建(2024 最新版)
  • 【Python笔记-设计模式】适配器模式
  • 二分算法(c++版)
  • 【C#】用于基于 UV DLP 的 3D 打印机的切片软件源码解析(一)DLP原理 GUI
  • Javase补充-Arrays类的常用方法汇总
  • 微信小程序-人脸检测-眨眼驱动ESP32蓝牙设备灯
  • 怎么在wifi中实现手机和电脑文件互传
  • 07 STL 简介
  • unity学习(39)——创建(create)角色脚本(panel)——静态(static)
  • MacOS环境下用powerline配置Terminal终端
  • liunx单机项目部署
  • SQL 中如何实现多表关联查询?
  • oracle 设置权限 禁止删除用户
  • 港科夜闻|香港科大计划建立北部都会区卫星校园完善科大创新带,发展未来创新科技 未来医药发展及跨学科教育...
  • linux反弹shell简单使用
  • 前后端分离Vue+nodejs校园论坛bbs系统x450z
  • ChatGPT的能力边界在哪?
  • Sentinel微服务流量治理组件实战下
  • vue+node.js美食分享推荐管理系统 io551
  • 云原生超融合八大核心能力|ZStack Edge云原生超融合产品技术解读