当前位置: 移动技术网 > IT编程>软件设计>架构 > spring-cache

spring-cache

2018年12月05日  | 移动技术网IT编程  | 我要评论

注解:

  @cacheable // 在方法调用前,先在缓存中去找,若没有,则在方法调用结束后,放到缓存中,属性cachenames、key。key中可以使用spel表达式,如#id,#root.args[0]

  @cacheput // 每次调用方法,都会刷新缓存。默认是调用方法后刷新;属性可以使用 #result.xx

  @cacheevict // 清楚缓存

  @caching // 复杂的配置逻辑

  @cacheconfig // 抽取出同一个service中共同的配置

 

 

springboot-cache缓存原理:

   1、自动配置类;cacheautoconfiguration

   2、缓存的配置类

    org.springframework.boot.autoconfigure.cache.genericcacheconfiguration
    org.springframework.boot.autoconfigure.cache.jcachecacheconfiguration
    org.springframework.boot.autoconfigure.cache.ehcachecacheconfiguration
    org.springframework.boot.autoconfigure.cache.hazelcastcacheconfiguration
    org.springframework.boot.autoconfigure.cache.infinispancacheconfiguration
    org.springframework.boot.autoconfigure.cache.couchbasecacheconfiguration
    org.springframework.boot.autoconfigure.cache.rediscacheconfiguration
    org.springframework.boot.autoconfigure.cache.caffeinecacheconfiguration
    org.springframework.boot.autoconfigure.cache.guavacacheconfiguration
    org.springframework.boot.autoconfigure.cache.simplecacheconfiguration【默认】
    org.springframework.boot.autoconfigure.cache.noopcacheconfiguration

  3、哪个配置类默认生效:simplecacheconfiguration;

  4、simplecacheconfiguration给容器中注入了一个cachemanager:concurrentmapcachemanager


  5、concurrentmapcachemanager可以获取和创建concurrentmapcache类型的缓存组件;他的作用将数据保存在concurrentmap中;

  默认使用的是concurrentmapcachemanager==concurrentmapcache;将数据保存在 concurrentmap<object, object>中

  开发中使用缓存中间件;redis、memcached、ehcache;

 

 

整合redis作为缓存

  redis 是一个开源(bsd许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。

  1、安装redis:使用docker;

  2、引入redis的starter

  3、配置redis

  4、测试缓存

    原理:cachemanager===cache 缓存组件来实际给缓存中存取数据

    1)、引入redis的starter,容器中保存的是 rediscachemanager

    2)、rediscachemanager 帮我们创建 rediscache 来作为缓存组件;rediscache通过操作redis缓存数据的

    3)、默认保存数据 k-v 都是object;利用序列化保存;当key-value都是object的时候,会使用序列化保存,默认是使用jdk的序列化机制

      如何保存为json

      1、引入了redis的starter,cachemanager变为 rediscachemanager;
      2、默认创建的 rediscachemanager 操作redis的时候使用的是 redistemplate<object, object>
      3、redistemplate<object, object> 是 默认使用jdk的序列化机制

    4)、自定义cachemanager;

    5)、key值命名;

      //存到redis的key值会多一个前缀,默认会将cachename作为key的前缀

      cachemanager.setuseprefix(true);

 

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网