Redis缓存注解

技术博客 (139) 2023-12-15 09:01:01

本篇博客将详细讲解@Cacheable,@CachePut , @CacheEvict使用,希望对大家有所帮助。

1、@Cacheable

作用是主要针对方法配置,能够根据方法的请求参数对其结果进行缓存 

参数 解释 example
value 缓存的名称,在 spring 配置文件中定义,必须指定至少一个 例如:
@Cacheable(value=”mycache”)
@Cacheable(value={”cache1”,”cache2”}
key 缓存的 key,可以为空,如果指定要按照 SpEL 表达式编写,如果不指定,则缺省按照方法的所有参数进行组合 @Cacheable(value=”testcache”,key=”#userName”)
condition 缓存的条件,可以为空,使用 SpEL 编写,返回 true 或者 false,只有为 true 才进行缓存 @Cacheable(value=”testcache”,condition="#userName.length()>2”)

案例:

service层

//表示使用my-redis-cache1缓存空间,key的生成策略为book+bid,当bid>10的时候才会使用缓存
    @Cacheable(value = "my-redis-cache1",key = "'book'+#bid",condition = "#bid>10")
    public Book selectByPrimaryKey(Integer bid) {
        return bookMapper.selectByPrimaryKey(bid);
    }

Test类

 @Test
    public void selectByPrimaryKey() {
        Book book = bookService.selectByPrimaryKey(18);
        System.out.println(book);
        System.out.println("---------------------------------------------");
        Book book2 = bookService.selectByPrimaryKey(18);
        System.out.println(book2);
    }

控制台输出

Redis缓存注解 (https://mushiming.com/) 技术博客 第1张

 2、@CachePut

作用是主要针对方法配置,能够根据方法的请求参数对其结果进行缓存,和 @Cacheable 不同的是,它每次都会触发真实查询。

参数 解释 example
value 缓存的名称,在 spring 配置文件中定义,必须指定至少一个 @CachePut(value=”my cache”)
key 缓存的 key,可以为空,如果指定要按照 SpEL 表达式编写,如果不指定,则缺省按照方法的所有参数进行组合 @CachePut(value=”testcache”,key=”#userName”)
condition 缓存的条件,可以为空,使用 SpEL 编写,返回 true 或者 false,只有为 true 才进行缓存 @CachePut(value=”testcache”,condition=”#userName.length()>2”)

3、@CacheEvict

作用是主要针对方法配置,能够根据一定的条件对缓存进行清空

参数 解释 example
value 缓存的名称,在 spring 配置文件中定义,必须指定至少一个 @CacheEvict(value=”my cache”)
key 缓存的 key,可以为空,如果指定要按照 SpEL 表达式编写,如果不指定,则缺省按照方法的所有参数进行组合 @CacheEvict(value=”testcache”,key=”#userName”)
condition 缓存的条件,可以为空,使用 SpEL 编写,返回 true 或者 false,只有为 true 才进行缓存 @CacheEvict(value=”testcache”,condition=”#userName.length()>2”)
allEntries 是否清空所有缓存内容,缺省为 false,如果指定为 true,则方法调用后将立即清空所有缓存 @CachEvict(value=”testcache”,allEntries=true)
beforeInvocation 是否在方法执行前就清空,缺省为 false,如果指定为 true,则在方法还没有执行的时候就清空缓存,缺省情况下,如果方法执行抛出异常,则不会清空缓存 @CachEvict(value=”testcache”,beforeInvocation=true)

案例:

service层:

 @CacheEvict(value = "my-redis-cache2",allEntries = true)
    public void clear() {
        System.out.println("清空my-redis-cache2缓存槽中的所有对象....");
    }

Test类:

public void clear() {
    bookService.clear();
}

注意:需要测试的话,先往缓存中缓存2个对象

声明:学习记录,若有错误,欢迎指正。

参考博客:SpringBoot之redis中常用的注解_小彭不会秃头的博客-CSDN博客

作者:借我丹青妙笔

THE END

发表回复