public class XXX{
    
@Resource
private XXX self;//@Cacheable通过内部调用将不会使用缓存,从Spring4.3开始可以通过注入self,再通过self内部调用即可解决
public final static String MY_KEY="my_key:";
@Cacheable(value=MY_KEY, key = "#root.target.getFormatKey(#p0,#p1)", unless="#result == null")//自定义key名称,查询结果为空则不缓存
public xXXEntity select(Date date,String str) {
return xXXdao.select(date, str);
}
public String getFormatKey(Date date,String str){//生成key
return DateUtils.getFormat(date)+sourceKey;//格式化时间拼接key
}
public Integer selectValue(Date date,String str) {
  xXXEntity entity = self.select(date, str);//解决内部调用不触发缓存的问题
    if(entity!=null){
return entity.getValue();
}
return 0;
}

}

1.解析:
value=MY_KEY -->redisz缓存中的key
生成redis中hash的key = "#root.target.getFormatKey(#p0,#p1)"  -->当前调用对象中的方法,传入第一个和第二个参数
unless="#result == null" -->查询结果为空则不缓存(不加上会缓存一个空对象,拿值就悲剧了)


2.内部调用不触发缓存
方法一:https://www.cnblogs.com/cyhbyw/p/8615816.html 侵删 方法二(推荐):https://stackoverflow.com/questions/16899604/spring-cache-cacheable-not-working-while-calling-from-another-method-of-the-s/48867068#48867068
 代码中有提现,思路:注入自己,然后通过注入的实例调用自己的方法来触发缓存机制.

@Resource
private XXX self;//@Cacheable通过内部调用将不会使用缓存,从Spring4.3开始可以通过注入self,再通过self内部调用即可解决

@Cacheable(value=MY_KEY, key = "#root.target.getFormatKey(#p0,#p1)", unless="#result == null")//自定义key名称,查询结果为空则不缓存
public xXXEntity select(Date date,String str) {
return xXXdao.select(date, str);
}
public Integer selectValue(Date date,String str) {
  xXXEntity entity = self.select(date, str);//解决内部调用不触发缓存的问题
    if(entity!=null){
return entity.getValue();
}
return 0;
}
  
}
 

使用@Cacheable 踩过的坑的更多相关文章

  1. 项目中踩过的坑之-sessionStorage

    总想写点什么,却不知道从何写起,那就从项目中踩过的坑开始吧,希望能给可能碰到相同问题的小伙伴一点帮助. 项目情景: 有一个id,要求通过当前网页打开一个新页面(不是当前页面),并把id传给打开的新页面 ...

  2. web开发实战--弹出式富文本编辑器的实现思路和踩过的坑

    前言: 和弟弟合作, 一起整了个智慧屋的小web站点, 里面包含了很多经典的智力和推理题. 其实该站点从技术层面来分析的话, 也算一个信息发布站点. 因此在该网站的后台运营中, 富文本的编辑器显得尤为 ...

  3. "开发路上踩过的坑要一个个填起来————持续更新······(7月30日)"

    欢迎转载,请注明出处! https://gii16.github.io/learnmore/2016/07/29/problem.html 踩过的坑及解决方案记录在此篇博文中! 个人理解,如有偏颇,欢 ...

  4. 【转载】Fragment 全解析(1):那些年踩过的坑

    http://www.jianshu.com/p/d9143a92ad94 Fragment系列文章:1.Fragment全解析系列(一):那些年踩过的坑2.Fragment全解析系列(二):正确的使 ...

  5. Redis Cluster踩过的坑

    Redis Cluster踩过的坑请参考如下链接:http://www.iteye.com/blogs/subjects/Redis_Cluster_Devops

  6. 第八篇:web之前端踩的一些坑

    前端踩的一些坑   前端踩的一些坑 本节内容 事件代理 清除标签的所有事件 bootstrap的模态框自定义方法 ajax在django里面实现post提交 ajax提交数据嵌套 1.事件代理 之前写 ...

  7. 使用ffmpeg视频编码过程中踩的一个坑

           今天说说使用ffmpeg在写视频编码程序中踩的一个坑,这个坑让我花了好多时间,回头想想,非常多时候一旦思维定势真的挺难突破的.以下是不对的编码结果:                   ...

  8. 那些年踩过的坑之:first-child伪类选择器

    原文:那些年踩过的坑之:first-child伪类选择器 :first-child 选择器用于选取属于其父元素的首个子元素的指定选择器.——w3school 嗯,乍一看好像说的不是很明白,因此这个选择 ...

  9. 《C++之那些年踩过的坑(二)》

    C++之那些年踩过的坑(二) 作者:刘俊延(Alinshans) 本系列文章针对我在写C++代码的过程中,尤其是做自己的项目时,踩过的各种坑.以此作为给自己的警惕. 今天讲一个小点,虽然小,但如果没有 ...

随机推荐

  1. vue 用axios实现调用接口下载excel

    了解的方式有两种: 1. 用a标签,href设置为后端提供的excel接口 <a href="excel接口">导出</a> 简单方便,缺点就是当有toke ...

  2. uint8_t / uint16_t / uint32_t /uint64_t 是什么数据类型

    在nesc的代码中,你会看到很多你不认识的数据类型,比如uint8_t等.咋一看,好像是个新的数据类型,不过C语言(nesc是C的扩展)里面好像没有这种数据类型啊!怎么又是u又是_t的?很多人有这样的 ...

  3. thinkphp 连接数据库 & 实例化模型操作 (下接thinkphp CURD 操作)/慕课

    7.1 连接数据库 (06:15) 1 7.2实例化模型 1 1.实例化基础模型 2 2. 实例化用户自定义模型 2 问题 2 3. 实例化公共模型 4 4. 实例化空模型 7    7.1 连接数据 ...

  4. 4、OpenCV Python 像素运算

    __author__ = "WSX" import cv2 as cv import numpy as np #前提需要运算的图像大小和类型完全相同 #算术运算 加减乘除 #逻辑运 ...

  5. CF1101B Accordion 模拟

    前后扫一遍: #include<iostream> #include<cstdio> #include<algorithm> #include<cstdlib ...

  6. mybatis 遍历字段和字段对应的值循环插入

    java代码: /** * 插入单条数据 * @param request * @param response * @param id * @param str * @return * @throws ...

  7. java 简单封装resultMap返回对象为map

    public class DbUtils { private static String host = "47.93.******"; private static String ...

  8. poj 2763 求树上的两个节点的最短距离+在线修改答案

    题目链接: http://poj.org/problem?id=2763 #include<stdio.h> #include<string.h> #include<ma ...

  9. shell编程中

    1.1 条件表达式 1.1.1 文件判断 常用文件测试操作符 常用文件测试操作符 说明 -d文件,d的全拼为directory 文件存在且为目录则为真,即测试表达式成立 -f文件,f的全拼为file ...

  10. CROSS APPLY和 OUTER APPLY 区别详解

    SQL Server 2005 新增 cross apply 和 outer apply 联接语句,增加这两个东东有啥作用呢? 我们知道有个 SQL Server 2000 中有个 cross joi ...