首页 > 编程语言 > 详细

springboot与缓存

时间:2020-05-09 23:54:10      阅读:90      评论:0      收藏:0      [点我收藏+]

springboot与缓存

几个重要的的概念&缓存注解

  1. Cache:缓存接口,定义缓存操作。实现由RedisCache,EhCacheCache,ConcurrentMapCache等

  2. CacheManager:缓存管理器,管理各种Cache主键

  3. @EnableCaching:开启基于注解的缓存

  4. @Cacheable:主要针对方法配置,能够根据方法的请求参数对其结果进行缓存

 /*
     几个属性:
            1.cacheName/value:指定缓存组件的名字
 
            2.key:缓存数据使用的key;可以用它来指定,。默认使用方法参数的值
 
            3.keyGenerator:key的生成器;可以自己指定key的生成器的组件id
                           key/keyGenerator二选一使用
 
            4.cacheManager:指定缓存管理器;或者cacheResolver指定获取解析器
 
            5.condition:指定符合条件的情况下才缓存;
 
            6.unless:否定缓存;当unless指定条件为true,方法的返回值就不会被缓存;可以获取到结果进行判断
 
            7.sync:是否使用异步模式
 */
 @Cacheable(cacheNames = "emp",key="#id",condition="#a0>1",unless="#a0==2")
     public Employee getEmp(Integer id){
         System.out.println("查询"+id+"号员工");
         Employee emp = employeeMapper.getEmployee(id);
         return emp;
    }
  1. @CacheEvict:清空缓存

 ?
     /*
     * @CacheEvict:缓存清除
     * 通过key指定要清除那个数据
     *   属性:
     *     allEntries:是否删除一个缓存组件中所有数据,默认false
     *     beforeInvocation:缓存的清除是否在方法之前执行,默认false;如果方法出现异常缓存就不会清除
     * */
     @CacheEvict(value="emp",key="#id")
     public void deleteEmp(Integer id){
         System.out.println("deleteEmp:"+id);
         employeeMapper.deleteEmpById(id);
    }
  1. @ CachePut:保证方法被调用,又希望结果被缓存

  /*
     * @CachePut:及调用方法有更新缓存数据
     * 运行时机:
     *     1.先调用目标方法
     *     2.将目标方法结果缓存起来
     *要想达到效果,必须做到修改key和存的时候的key相同。
     * */
     @CachePut(value="emp",key="employee.id")
     public Employee updteEmp(Employee employee){
         System.out.println("updateEmp:"+employee);
         employeeMapper.updateEmp(employee);
         return employee;
    }
  1. @Caching:定义复杂的缓存

  /*
     * @Caching定义复杂的缓存规则
     *
     * */
     @Caching(
             cacheable = {
                     @Cacheable(value="emp",key="#lastName")
            },
             put={
                     @CachePut(value="emp",key="result.id"),
                     @CachePut(value="emp",key="result.email")
            }
    )
     public Employee getEmpByLastNme(String lastNanme){
         return employeeMapper.getEmpByLatName(lastNanme);
    }
  1. @Cacheconfig:在类上指定公共属性,在方法缓存山就不用指定了(抽取缓存的公共属性)

以下是@CacheConfig的源码,可以抽取cachenames,keyGenerator,cacheManager,cacheResolver这四个公共属性

 public @interface CacheConfig {
     String[] cacheNames() default {};
 ?
     String keyGenerator() default "";
 ?
     String cacheManager() default "";
 ?
     String cacheResolver() default "";
 }
 ?
  1. keyGenerator:缓存数据时key生成策略,自定义key名字

 @Configuration
 public class MyCacheConfig {
     @Bean("mykeyGenerator")
     public KeyGenerator keyGenerator() {
         return new KeyGenerator() {
             @Override
             public Object generate(Object o, Method method, Object... objects) {
                 return method.getName()+"["+ Arrays.asList(objects).toString()+"]";
            }
        };
    }
 }
 ?
 //此时serviceimpl方法中不再是key而是KeyGenerator
 @Cacheable(vlaue="emp",keyGenerator="mykeyGenerator")
 public Employee getEmp(Integer id){
         System.out.println("查询"+id+"号员工");
         Employee emp = employeeMapper.getEmployee(id);
         return emp;
    }
  1. serialize:缓存数据时value序列化策略

springboot与缓存

原文:https://www.cnblogs.com/yueyueniao-gif/p/12861147.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!