zoukankan      html  css  js  c++  java
  • SpringBoot集成redis,使用@Cachexxxx

    一、引入相关依赖:

    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-cache</artifactId>
    </dependency>

    SpringBoot检查到有redis的启动依赖,就会将默认的ConcurrentMapCacheManage换为 RedisCacheManager;默认创建的 RedisCacheManager 操作redis的时候使用的是 RedisTemplate<Object, Object>,并且默认使用jdk的序列化机制

    二、使用相关@Cachexxxx:

    注意:该注解特性和@Transactional一致,基于AOP,需要外界调用

    SpringCache是对缓存使用的抽象,通过在已有代码中打上几个预定义的注释,就可以实现我们希望达到的缓存效果

    @EnableCaching
    作用:标注在Configuration类上,用于启用Cache注解

    @CachePut 
    作用:标注到写数据的方法上,如新增/修改方法,调用方法时会自动把符合条件的数据存入缓存

    public @interface CachePut {    
        String[] value();              //缓存的名字,可以把数据写到多个缓存  // value -》 cacheName 二者选一,必须指定   //最终  value::key--obj
    String key() default ""; //缓存key,如果不指定将使用默认的KeyGenerator生成(SimpleKey:使用方法参数) String condition() default ""; //满足缓存条件的数据才会放入缓存,CachePut的condition只在调用方法之后判断,可以操作result String unless() default ""; //用于否决缓存更新的,在方法执行之后,用result进行判断 }

    @CacheEvict
    作用:标注到移除数据的方法上,如删除方法,调用方法时会从缓存中移除符合条件的数据

    public @interface CacheEvict {    
        String[] value();                        //缓存的名字,可以从多个缓存中移除数据
        String key() default "";                 
        String condition() default "";           //满足缓存条件的数据才会从缓存中移除,condition在调用方法之前和之后都会判断
        boolean allEntries() default false;      //是否移除所有数据
        boolean beforeInvocation() default false;//是调用方法之前移除/还是调用之后移除 ,默认是调用之后移除   
    }

    @Cacheable
    作用:标注到读取数据的方法上。如查找方法:先从缓存中读取,如果没有再调用方法获取数据,否则不执行方法体,然后把数据添加到缓存中。

    @Caching
    作用:定义若干组的Cache注释,用于实现多个缓存逻辑。例如用户新增成功后,添加id-->user;username--->user;email--->user到缓存,代码如下:

    @Caching(    
            put = {    
                    @CachePut(value = "mycache", key = "#user.id"),    
                    @CachePut(value = "mycache2", key = "#user.username.concat(#user.email)")   
            },
            evict = {
                    @CacheEvict(value = "tempcache", key = "#user.id")
            }  
    )    
    public User save(User user) {
        .............
    }

    三、 缓存条件condition和unless的执行时机:

    @Cacheable中的condition是在执行方法之前用于被判断是否符合从缓存中读取,因此它无法使用返回值#result;而其unless是在执行方法之后做判断,因此它可以使用返回值#result。
    @Cacheput中的condition和unless都是在执行方法之后用于被判断是否符合将结果保存到缓存中,因此它们都可以使用返回值#result。
    @CacheEvict的condition由beforeInvocation的值来确定是在方法调用前还是在方法调用后执行。若beforeInvocation为true则condition在方法调用前执行;否则condition在方法调用后执行。

    四、SpEL语法及可使用的上下文数据:

    https://blog.csdn.net/m0_37962779/article/details/78747619

  • 相关阅读:
    UNP学习第八章udp
    UNP学习第七章
    linux IPC 消息队列(二)
    epoll学习(二)
    epoll学习
    UNP学习第六章(二)
    UNP学习第六章select
    UNP学习第五章(二)
    UNP学习第五章
    UNP学习第四章tcp
  • 原文地址:https://www.cnblogs.com/brxHqs/p/10298217.html
Copyright © 2011-2022 走看看