spring缓存注解

spring缓存注解

spring缓存概述

​ spring缓存是Spring框架中的功能,提供了应用程序中有效管理数据缓存的方式。缓存时一种将数据存储在内存中的技术,方便我们在后续访问相同数据时能更快的获取数据,而不必重新访问数据库或资源。

​ Spring缓存的主要目标是提高应用程序的性能,减少对耗时资源的访问,并减少响应时间。它通过将数据存储在内存中的缓存中,以加快对数据的访问,从而提高了应用程序的响应速度。这在处理频繁访问的数据或计算昂贵的数据时特别有用。

四种常见的的spring缓存注解

@EnableCaching

​ 在使用缓存注解之前,我们需要使用@Enablecaching注解来启动缓存注解,用例如下:

@EnableCaching
@SpringBootApplication
@EntityScan("com.wn.bms.domain.entity.jpa")
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class);
    }
}

@Cacheable

​ 用来表示某一个方法的结果可以被缓存。使用该注解后,相同的方法以相同参数再次调用时,直接会去缓存中获取结果,而不是重新执行该方法。@cacheable单个缓存使用用例如下:

    @Cacheable(cacheNames = "allUsers")
    @Override
    public List<User> findAll() {
        return iUserDao.findAll();
    }

​ 工作流程:

  • 当首次调用findAll() 方法时,Spring会检查名为"allUsers"的缓存是否包含此特定调用的结果。
  • 如果缓存中没有存储相同参数的结果(例如没有存储已获取的所有用户数据),则方法iUserDao.findAll() 将被执行,结果将被获取。
  • 结果将被缓存,使用"allUsers"作为键,以便将来使用相同的参数(或者在不同的调用中也可以使用相同的键)时能够从缓存中获取结果而不必重新执行方法。
  • 如果以后再次调用findAll() 方法,但参数与之前相同,Spring将首先检查缓存,如果找到匹配的缓存项,它将从缓存中返回结果,而不必执行iUserDao.findAll() 方法。

​ 当然,@Cacheable还能指定多个缓存,Spring的缓存管理机制确实在调用方法之前会检查所有相关缓存,以查看是否至少有一个缓存命中。如果至少有一个缓存命中,相关的值会被返回。

@Cacheable 注解相关参数

序列参数解释
1cacheNames指定缓存组件的名字
2key缓存数据时使用的key,默认使用方法参数
3keyGeneratorkey 的生成器。 key 和 keyGenerator 二选一使用
4cacheManager可以用来指定缓存管理器。从哪个缓存管理器里面获取缓存。
5condition可以用来指定符合条件的情况下才缓存
6unless否定缓存。当 unless 指定的条件为 true ,方法的返回值就不会被缓存。当然你也可以获取到结果进行判断
7sync是否使用异步模式。
@Cacheable(cacheNames = "findByName",key = "#name")

@CacheEvict

​ @CacheEvict用来标注在需要清除缓存元素的方法或者类上面,当标注在一个类上面时,类上所有的方法的执行都会触发缓存的清除操作。@CacheEvict 具有一个额外的参数(allEntries),表示是否需要执行整个缓存的清除,而不仅仅是一个条目的清除(基于 key)。具体用例:

  @CacheEvict(cacheNames = "allUsers",allEntries = true)
    @Override
    public void rmUser(Long id) {
        iUserDao.deleteById(id);
    }

适用场景:单纯清除指定缓存规则、key的缓存

@CachePut

​ @Cacheput注解同样也支持缓存功能,但被该注解标记的方法在执行之前不会去检查缓存中是否存在之前已经执行过的结果,而是每次都会执行该方法,并将执行的结果以键值对的方式再存入指定的缓存中,用例如下(方法需要有返回结果List):

    @CachePut(cacheNames = "allUsers")
    @Override
    public List<User> update() {
       iUserDao.deleteById(4l);
       return iUserDao.findAll();
    }

适用场景:需要强制更新缓存内容的场景

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值