SpringBoot 06 ~ Cache

2018-11-07  本文已影响9人  帅可儿妞

缓存对于高并发是必不可少的部分,如果你的项目的并发量非常大,而缓存这部分又非常弱,配置好缓存能使你的项目性能有一个质的飞跃。今天就来看看SpringBoot中的缓存吧

一、SpringBoot缓存简介

  1. JCache
    • JCache是Java Caching的简写,有JCP发布的一套Java缓存规范,它提供了一组通用接口和类,可用于将Java对象临时存储在内存中;但不是所有的缓存框架都实现了这组接口,但是我们常用的Redis,EhCache都是实现了的,如果没有实现,那么就需要自己动手,过程相对来说还是比较麻烦的。
    • JCache的主要组件:
      • CachingProvider:定义了创建、配置、获取、管理和控制多个CacheManager。一个应用可以在运行期访问多个CachingProvider;
      • CacheManager:定义了创建、配置、获取、管理和控制多个唯一命名的Cache,这些Cache存在于CacheManager的上下文中。一个CacheManager仅被一个CachingProvider所拥有;
      • Cache:是一个类似Map的数据结构并临时存储以Key为索引的值。一个Cache仅被一个CacheManager所拥有;
      • Entry:是一个存储在Cache中的key-value对;
      • Expiry:每一个存储在Cache中的条目有一个定义的有效期。一旦超过这个时间,条目为过期的状态。一旦过期,条目将不可访问、更新和删除。缓存有效期可以通过ExpiryPolicy设置;
        JCache的主要组件关系
    • JCache小示例:
      CachingProvider cachingProvider = Caching. getCachingProvider(); 
      CacheManager cacheManager = cachingProvider. getCacheManager(); 
      MutableConfiguration<String, String> config = new MutableConfiguration(); 
      Cache<String, String> cache = cacheManager. createCache("CacheName",config); 
      cache.put("key","value"); 
      String value = cache.get("key");
      
  2. Spring缓存接口
    • 因为JSR107的JCache的难度相对来说比较大,Spring在3.1版本的时候发布了两个接口来简化缓存的开发,并且支持JCache的注解;这个两个接口就是:
      • org.springframework.cache.Cache:缓存接口,定义缓存操作。实现有:RedisCache、EhCacheCache、ConcurrentMapCache等;
      • org.springframework.cache.CacheManager:缓存管理器,管理各种缓存(Cache)组件;
    • Spring缓存接口注解。为了使得缓存开发简便易用,Spring定义了一些注解:
      • @EnableCaching:开启缓存的注解功能;参数:①cacheNames/value:指定缓存组件(CacheManager)的名字,将方法的返回结果放在哪个缓存中,是数组的方式,可以指定多个缓存;②key:缓存数据使用的key;可以用它来指定。默认是使用方法参数的值。如果手动指定的话:@EnableCaching(value="<mgr-name>",key="#<parameter-name>"),即可以编写SpEL表达式,详见官网或下图;③keyGenerator:key的生成器;可以自己指定key的生成器的组件id, key/keyGenerator:二选一使用;④condition:指定符合条件的情况下才缓存,同样可以使用SpEL表达式,参数unless与其意义相反;
        Cache SpEL available metadata
      • @Cacheable:标记在查询的方法上,方法的返回值就是缓存的目标,能够根据方法的请求参数对其结果进行缓存;使用keyGenerator来生成缓存数据时key生成策略,serialize来指定缓存数据时value序列化策略;
      • @CachePut:更新缓存,标记在更新数据库数据的方法上,书库更新完成后就会更新缓存中的数据;
      • @CacheEvict:标记在删除的方法上,能根据参数将缓存中的对象清除;

二、SpringCache的使用

  1. 创建SpringBoot项目,勾选Core的Cache;
  2. 编写正常的业务逻辑代码;
  3. 在主类上标记@EnableCaching来开启缓存;在Service的实现类的对应的方法上使用上面的注解;
  4. 在配置文件中添加配置来开启日志的打印:logging.level.<package>=true
上一篇下一篇

猜你喜欢

热点阅读