redis缓存-注解-CacheConfig-Caching-CachePut-CacheEvict

@CacheConfig(cacheNames = {"cache-Cacheconfig"})  //设置全局缓存名称。
public class cacheConfigServiceImpl implements cacheConfigService {

    /**
     * @CachePut: 这个注释可以确保方法被执行,同时方法的返回值也被记录到缓存中,实现缓存与数据库的同步更新。
     * @Cacheable(value=”accountCache”),这个注释的意思是,当调用这个方法的时候,会从一个名叫 accountCache 的缓存中查询,如果没有,则执行实际的方法(即查询数据库),并将执行的结果存入缓存中,否则返回缓存中的对象
     * @CachEvict 的作用 主要针对方法配置,能够根据一定的条件对缓存进行清空
     *
     *   @Cacheable(key = "#str",condition="#str.length()>2")
     *   condition,相当于条件判断是否,需要加入缓存·
     *
     * @Caching(put = {
     * @CachePut(value = "user", key = "#user.id"),
     * @CachePut(value = "user", key = "#user.username"),
     * @CachePut(value = "user", key = "#user.email")
     * })
     *    有时候我们可能组合多个Cache注解使用;比如用户新增成功后,我们要添加id–>user;username—>user;email—>user的缓存;此时就需要@Caching组合多个注解标签了
     *
     * @Cacheable(key = "#str",condition="#str.length()>2")  因为这个注解在进入方法前去检测condition    condition = "#result != null" , 而这时还没有result,会造成result为null的情况。
     *
     * allEntries=true,清除该当前value值空间下的所有缓存数据
     *
     * beforeInvocation = true  先执行缓存,在执行方法
     * @param str
     * @return
     */



    @Cacheable(key = "#str",condition="#str.length()>2")  //设置缓存 key值
    @Override
    public String test1Config(String str) {
        return str;
    }

    @CacheEvict(key = "#str", beforeInvocation = true)  //通过key 移除redis缓存 , beforeInvocation = true, 执行方法前执行缓存。  但是:默认在当前注解方法成功执行之后再清除。
    @Override
    public String test2Config(String str) {
        return str;
    }
    /**
     * unless的作用时机: 目标方法运行后
     *                  注: 如果(因为直接从缓存中获取到了数据,而导致)目标方法没有被执行,那么unless字段不生效
     *
     * unless的功能: 是否  令注解(在方法执行后的功能)不生效;
     *              注:unless的结果为true,则(方法执行后的功能)不生效;
     *                 unless的结果为false,则(方法执行后的)功能生效.
     *
     *  举例说明一: 对于@Cacheable注解,在执行目标方法前,如果从缓存中查询到了数据,那么直接返回缓存中的数据;
     *            如果从 缓存中没有查询到数据,那么执行目标方法,目标方法执行完毕之后,判断unless的结果,
     *            若unless的结果为true,那么不缓存方法的返回值;
     *            若unless的结果为false,那么缓存方法的返回值。
     *
     *  举例说明二: 对于@CachePut注解,在目标方法执行完毕之后,判断unless的结果,
     *            若unless的结果为true,那么不缓存方法的返回值;
     *            若unless的结果为false,那么缓存方法的返回值。
     *
     * 注:unless默认为"",即相当于默认为false.
     *
     * 注:因为unless的作用时机是在方法运行完毕后,所以我们可以用SpEL表达式   #result   来获取方法的返回值
     */
    @CachePut( key = "#i + '*****' ", unless = "#result < 5000")
    @Override
    public Integer test3Config(Integer i) {
        return i;
    }


    /**
     * #a0+1   ,,,如果传的参数是  1开始,   那么加一就是从2开始
     *例如:传参数是 1,2,3,4,5,6,7,8,9    那么参数级别加起来是  2,3,4,5,6,7,8,9,10
     * #a0 代表第一个参数
     *
     * @param i
     * @return
     */


    @CacheUser.UserSaveCache2
    @Override
    public Integer test4Config(int i) {
        return null;
    }

    /**
     *
     * 多命名空间,,当进行缓存读取时,,会按照命名空间的顺讯,挨个从命名空间中查询对应的key,
     * 如果在某个命名空间找到缓存,就不会查询排在后面的命名空间,也不对执行对应的方法
     * @param str
     * @return
     */
    @Cacheable(cacheNames = {"TestConditionSpaceB", "TestConditionSpaceA"}, key = "'abcd'+#str")
    @Override
    public String test5Config(String str) {
        System.out.println("说明(指定cacheNames下存在对应key的缓存)为false!");
        return str;
    }

 

你可能感兴趣的:(redis)