redis注解

value  有隔离作用,不行的话可以:

再手动用一下#root.caches,向spring表明,我们要用value所表示的缓存名来区分具体的缓存实体;

具体用法示例:

当方法的value属性进行了设置(如@Cacheable(value={"cache1", "cache2"})),则有两个cache;

此时可以使用@Cacheable(value={"cache1", "cache2"},key="#root.caches[0].name"),意思就是使用value为“cache1”的缓存;

@CacheEvict(value = "role1",allEntries = true)------整块全部删除

@CacheEvict(value = "role1",key = "#val",allEntries = false)-----指定key

@CachePut(value = "role1",key = "#val")---直接放入缓存块(追加,更新)

@Cacheable(value = "role1",key = "#val")---从缓存块获取,没有走方法

value==@CacheConfig(cacheNames="user")

@AliasFor("cacheNames")

String[] value() default {};

@AliasFor("value")

String[] cacheNames() default {};

@Cacheable 注解 源码如下 :

@Target({ElementType.METHOD, ElementType.TYPE})

value、cacheNames 属性 : 指定 Cache名称 表示当前方法的返回值是会被缓存在哪个 Cache上--块

key 属性 : 用来指定 Spring缓存方法的返回结果时对应的 key---在快上

@Cacheable(value = "users", key = "#id")

public User find(Integer id) {

    return null;

}

@Cacheable(value = "users", key = "#p0")

public User find(Integer id) {

    return null;

}

sync属性 : 在多线程环境下,某些操作可能使用相同参数同步调用。默认情况下,缓存不锁定任何资源,可能导致多次计算,而违反了缓存的目的。对于这些特定的情况,属性 sync 可以指示底层将缓存锁住,使只有一个线程可以进入计算,而其他线程堵塞,直到返回结果更新到缓存中

@Cacheable(cacheNames="foos", sync="true")----享元模式

public Foo executeExpensiveOperation(String id) {

}

condition属性 : 指定发生的条件,condition属性默认为空,表示将缓存所有的调用情形。其值是通过 SpringEL表达式来指定的,当为true时表示进行缓存处理;当为 false 时表示不进行缓存处理,即每次调用该方法时该方法都会执行一次

@Cacheable(value={"users"}, key="#user.id", condition="#user.id%2==0")

@CachePut("users")  刷新缓存---用户可以操作不好指定到块(一个块多个key时)----追加???---追加、覆盖(更新)

https://blog.csdn.net/u013041642/article/details/80370156----------一般是多个方法操作一个缓存,来实现同步

@CacheEvict : 

@CacheEvict(value="users", allEntries=true)   --按照块清除,按照key清除(一个server一个块),可以用来整块清除---管理员接口

beforeInvocation属性 : 清除操作默认是在对应方法成功执行之后触发的,即方法如果因为抛出异常而未能成功返回时也不会触发清除操作。--触发的时机

@Caching : @Caching注解可以在一个方法或者类上同时指定多 个Spring Cache 相关的注解。其拥有三个属性 : cacheable、put和evict,分别用于指定@Cacheable、@CachePut 和 @CacheEvict----三个元素可以放在一起使用,指明这个方法,触发哪些缓存操作

可以操作其他缓存

@Caching(cacheable = @Cacheable("users"),

         evict = { @CacheEvict("cache2"),

                   @CacheEvict(value = "cache3", allEntries = true) })

public User find(Integer id) {

    return null;

}

参考:

https://blog.csdn.net/chenshun123/article/details/79518812

https://q.cnblogs.com/q/111220/

https://blog.csdn.net/chenleixing/article/details/44815443

https://blog.csdn.net/weixin_34320724/article/details/86029310

相关推荐