(1)、使用@EnableCaching注解开启基于注解的缓存

 package cn.coreqi;

 import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching; @SpringBootApplication
@EnableCaching //开启基于注解的缓存
public class SpringbootjdbcApplication { public static void main(String[] args) {
SpringApplication.run(SpringbootjdbcApplication.class, args);
} }

(2)、对使用缓存的方法添加缓存注解

 package cn.coreqi.service;

 import cn.coreqi.dao.UserRepository;
import cn.coreqi.entities.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.*;
import org.springframework.stereotype.Service; import java.util.List;
import java.util.Optional; @Service
//@CacheConfig(cacheNames = "user") //抽取缓存的公共配置
//可以使用@Caching注解在方法上运用多个缓存注解
public class UserService {
@Autowired
private UserRepository userRepository; public User addUser(User user){
return userRepository.save(user);
} /**
* @CachePut:调用方法并同步更新缓存,修改了数据库的某个数据同时更新缓存
* 运行流程
* 1.先调用目标方法
* 2.将运行结果缓存起来并同步更新缓存
* @CachePut的Key可以使用#result拿到运行结果
* @param user
* @return
*/
@CachePut(cacheNames = "user",key = "#result.Id")
public User modifyUser(User user){
return userRepository.save(user);
}
public List<User> getList(){
return userRepository.findAll();
} /**
* @Cacheable标注的方法在执行之前先来检查缓存中有没有这个数据,如果没有就运行方法并将结果放入缓存
* 默认按照参数的值作为Key去查询缓存
* 几个重要属性:
* cacheNames/value:指定当前缓存所在Cache组件的名称
* key:缓存数据使用的Key,默认是方法的入参和返回值组合,Key支持SpEL表达式
* keyGenerator:Key的生成器,可以自己指定Key的生成策略(key和keyGenerator二选一)
* cacheManager:指定缓存管理器,或者cacheResolver指定缓存解析器
* condition:指定符合条件的情况下才缓存数据
* unless:否定缓存,当unless指定的条件为True的情况下方法的返回值就不会被缓存,可以利用获取到的结果进行判断
* sync:是否使用异步模式
* @param id
* @return
*/
@Cacheable(cacheNames = "user")
public User getById(Integer id){
System.out.println("查询数据Id:" + id);
Optional<User> user = userRepository.findById(id);
return user.get();
} /**
* @CacheEvict:清除缓存
* 几个重要属性:
* key:指定要清除数据的Key
* allEntries:是否清除这个缓存中所有缓存数据
* beforeInvocation:缓存的清除是否在方法运行之前执行,默认False
* @param id
*/
@CacheEvict(cacheNames = "user",key = "#id")
public void delById(Integer id){
userRepository.deleteById(id);
}
}

*缓存支持的SpEL表达式

描述 示例
当前被调用的方法名
#root.methodName
当前被调用的方法
#root.method.name
当前被调用的目标对象
#root.target
当前被调用的目标对象类
#root.targetClass
当前被调用的方法的参数
#root.args[0]

当前方法调用使用的缓存列表

(如@cacheable(value={"cache1","cache2"}),则有两个cache)

#root.caches[0].name
方法参数的名字,可以直接#参数名称,也可以使用#p0的形式,0代表参数索引
#Id、#users0
方法执行后的返回值(仅当方法执行之后的判断有效,如“unless”,“cachePut”的表达式,“cacheEvict的表达式”,beforeInvocation=false)

#result

SpringBoot缓存的更多相关文章

  1. SpringBoot缓存之redis--最简单的使用方式

    第一步:配置redis 这里使用的是yml类型的配置文件 mybatis: mapper-locations: classpath:mapping/*.xml spring: datasource: ...

  2. spring boot学习(十三)SpringBoot缓存(EhCache 2.x 篇)

    SpringBoot 缓存(EhCache 2.x 篇) SpringBoot 缓存 在 Spring Boot中,通过@EnableCaching注解自动化配置合适的缓存管理器(CacheManag ...

  3. SpringBoot缓存管理(二) 整合Redis缓存实现

    SpringBoot支持的缓存组件 在SpringBoot中,数据的缓存管理存储依赖于Spring框架中cache相关的org.springframework.cache.Cache和org.spri ...

  4. springboot缓存开发

    前言:缓存在开发中是一个必不可少的优化点,近期在公司的项目重构中,关于缓存优化了很多点,比如在加载一些数据比较多的场景中,会大量使用缓存机制提高接口响应速度,简介提升用户体验.关于缓存,很多人对它都是 ...

  5. springboot缓存的使用

    spring针对各种缓存实现,抽象出了CacheManager接口,用户使用该接口处理缓存,而无需关心底层实现.并且也可以方便的更改缓存的具体实现,而不用修改业务代码.下面对于在springboot中 ...

  6. springboot缓存及连接池配置

    参见https://coding.imooc.com/lesson/117.html#mid=6412 1.springboot的springweb自己默认以及配置好了缓存,只需要在主文件(XxxAp ...

  7. SpringBoot 缓存注解 与EhCache的使用

    在SpringBoot工程中配置EhCache缓存 1.在src/main/resources下新建ehcache.xml文件 eternal=true //缓存永久有效,false相反 maxEle ...

  8. SpringBoot 缓存模块

    默认的缓存配置 在诸多的缓存自动配置类中, SpringBoot默认装配的是SimpleCacheConfigguration, 他使用的CacheManager是 CurrentMapCacheMa ...

  9. 转载-springboot缓存开发

    转载:https://www.cnblogs.com/wyq178/p/9840985.html   前言:缓存在开发中是一个必不可少的优化点,近期在公司的项目重构中,关于缓存优化了很多点,比如在加载 ...

  10. SpringBoot缓存技术

    一.SpringBoot整合Ehhcache 添加maven依赖 <dependency> <groupId>org.springframework.boot</grou ...

随机推荐

  1. hdu 4897 Little Devil I (树链剖分+线段树)

    题目链接:  http://acm.hdu.edu.cn/showproblem.php?pid=4897 题意: 给你一棵树,一开始每条边都是白色,有三种操作: 1.将 u - v路径上的边转换颜色 ...

  2. MT【50】高中曲线系集大成之双切线法

    [历史使人聪明,诗歌使人机智,数学使人精细,哲学使人深邃,道德使人严肃,逻辑与修辞使人善辩.--- Bacon,Francis] 练习: 评:这道2011高考题的解析做法参考答案也值得一看,但我这边在 ...

  3. android 开启闪光灯小应用

    该程序需要在AndroidManifest.xml添加权限,属性 android:screenOrientation="portrait" android.permission.C ...

  4. 【BZOJ3821/UOJ46】玄学(二进制分组,线段树)

    [BZOJ3821/UOJ46]玄学(二进制分组,线段树) 题面 BZOJ UOJ 题解 呜,很好的题目啊QwQ. 离线做法大概可以线段树分治,或者直接点记录左右两次操作时的结果,两个除一下就可以直接 ...

  5. sharepoint my site setting

    参考这个guide : http://technet.microsoft.com/en-us/library/ee624362.aspx User profile service 不能打开, 原因是s ...

  6. 洛谷 P2158 [SDOI2008]仪仗队 解题报告

    P2158 [SDOI2008]仪仗队 题目描述 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线 ...

  7. 【洛谷P1018】乘积最大 dp+高精度

    题目大意:给定一个 N 个数组成的串,可以在串中插入 M 个乘号,求乘积最大是多少.N <= 40 阶段:前 i 个数用了 j 个乘号. 仅用阶段可以表示出一个状态,因此状态转移方程为 \(dp ...

  8. .net跨防火墙链接oracle连接池链接长时间无通讯数据被断开后报错问题解决

    环境: .net 4.0以上使用Oracle.ManagedDataAccess组件链接oracle数据库,应用程序与数据库之间存在硬件防火墙. 症状:应用程序启动后正常访问,如果出现长时间无数据库请 ...

  9. 应用程序发生异常 unknown software exception (0xc00000fd)... - 栈溢出(Stack overflow)

    今天在写程序的时候,弹出这样的提示对话框: 应用程序发生异常 unknown software exception (0xc00000fd): 相关代码是这样,在一个函数中读取一个csv文件,先根据这 ...

  10. Linux:echo中,>和>>的区别(保存结果和追加结果)

    在Linux中,对于echo命令,保存文件时,">"和">>"是有区别的: 假如有A_R1,B_R2,C_R1三个字符 for i in `l ...