SpringBoot整合redis使用缓存注解详解

 更新时间:2024年01月15日 09:48:10   作者:Mu_Mu是一只小白  
这篇文章主要介绍了SpringBoot整合redis使用缓存注解详解,@Cacheable在方法执行前判断对应缓存是否存在,如果存在直接返回缓存结果,否者执行方法将结果缓存,适用于查询类,需要的朋友可以参考下

1.启动类标明@EnableCaching

@SpringBootApplication
@MapperScan("com.jx.luckyDraw.mapper")
@EnableCaching
public class LuckyDrawApplication {

    public static void main(String[] args) {
        SpringApplication.run(LuckyDrawApplication.class, args);
    }



}

2.常用注解的种类

@Cacheable

@CachePut

@CacheEvict

2.1 作用

  • @Cacheable:在方法执行前判断对应缓存是否存在,如果存在直接返回缓存结果,否者执行方法将结果缓存,适用于查询类。
  • @CachePut:与@Cacheable不同的是@CachePut一定会执行方法,并将方法的返回值更新到缓存,适用于更新,插入。
  • @CacheEvict:清除缓存。

2.2 例子

@Cacheable

  @Cacheable(cacheNames = "drawDetails", key = "#userId + ':' + #batchId", unless = "#result ==null")
    public DrawDetailPO getDrawDetails(String userId, Long batchId) {

当getDrawDetails方法的返回值不为null时,将方法的执行结果按照#userId + ‘:’ + #batchId 的方式缓存到redis中。

redis中键名为:

drawDetails::81466011bd2a7cf40502a08827038390:1490935513660657664

@CacheEvict

 @CacheEvict(value = {"drawBatch", "drawDetails"}, allEntries = true, condition = "#result > 0")
    @Override
    public int newDrawBatchInfo(Integer batchCount) {

当newDrawBatchInfo方法的返回值大于0时,将命名空间为drawBatch" 或者drawDetails的键全部删除。

allEntries 默认为false,当有多个键时必须配置true才能删除。

在这种没指定key,使用默认keyGenerator 时,必须使用allEntries =true才能删除

  @Cacheable(cacheNames = "employeeSelectList", unless = "#result ==null")
    public List<HrmEmployeeSelectVO> querySelectList(HrmEmployeeSelectVO employeeSelectVO) {
        return employeeMapper.querySelectList(employeeSelectVO);
    }
@CacheEvict(value = "employeeSelectList",allEntries = true,condition = "#result = true ")

beforeInvocation 属性:是否在方法执行前删除,默认为false。

到此这篇关于SpringBoot整合redis使用缓存注解详解的文章就介绍到这了,更多相关SpringBoot整合redis内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 浅谈JAVA版本号的问题 Java版本号与JDk版本

    浅谈JAVA版本号的问题 Java版本号与JDk版本

    这篇文章主要介绍了浅谈JAVA版本号的问题 Java版本号与JDk版本,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • java代码实现双向链表

    java代码实现双向链表

    这篇文章主要为大家详细介绍了java代码实现双向链表,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • Java实现字符串解析为日期时间的方法示例

    Java实现字符串解析为日期时间的方法示例

    这篇文章主要介绍了Java实现字符串解析为日期时间的方法,结合具体实例形式分析了java日期时间字符串的解析操作相关实现技巧,需要的朋友可以参考下
    2017-04-04
  • Java接口中尽量避免使用数组

    Java接口中尽量避免使用数组

    这篇文章主要介绍了Java接口中尽量避免使用数组的建议,根据实际示例展示了接口中使用数组而造成的影响程序速度的现象,需要的朋友可以参考下
    2015-07-07
  • Java的Finalizer引发的内存溢出问题及解决

    Java的Finalizer引发的内存溢出问题及解决

    本文介绍了Java中的Finalizer机制,解释了当类实现finalize()方法时,JVM的行为和潜在的风险,通过一个示例程序,展示了实现finalize()方法会导致大量对象存活,最终引发OutOfMemoryError,文章分析了GC日志,解释了Finalizer线程和主线程之间的竞争
    2025-03-03
  • 使用Spring AntPathMatcher的doMatch方法

    使用Spring AntPathMatcher的doMatch方法

    这篇文章主要介绍了使用Spring AntPathMatcher的doMatch方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • 浅谈为什么Java中1000==1000为false而100==100为true

    浅谈为什么Java中1000==1000为false而100==100为true

    这篇文章主要介绍了浅谈为什么Java中1000==1000为false而100==100为true,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • 一文详解Elasticsearch和MySQL之间的数据同步问题

    一文详解Elasticsearch和MySQL之间的数据同步问题

    Elasticsearch中的数据是来自于Mysql数据库的,因此当数据库中的数据进行增删改后,Elasticsearch中的数据,索引也必须跟着做出改变。本文主要来和大家探讨一下Elasticsearch和MySQL之间的数据同步问题,感兴趣的可以了解一下
    2023-04-04
  • Java中ArrayList与顺序表的定义与实现方法

    Java中ArrayList与顺序表的定义与实现方法

    ArrayList是一个实现List接口的类,底层是动态类型顺序表,本质也就是数组,动态主要体现在它的扩容机制,下面这篇文章主要给大家介绍了关于Java中ArrayList与顺序表的定义与实现的相关资料,需要的朋友可以参考下
    2022-07-07
  • SpringAop切面执行顺序实践

    SpringAop切面执行顺序实践

    本文介绍Spring AOP中自定义切面与内置切面的执行顺序控制方法,通过@Order注解设置切面优先级,确保业务逻辑正确执行,感兴趣的可以了解一下
    2026-04-04

最新评论