欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

spring-cache

程序员文章站 2022-04-19 13:53:30
注解: @Cacheable // 在方法调用前,先在缓存中去找,若没有,则在方法调用结束后,放到缓存中,属性cacheNames、key。key中可以使用SpEl表达式,如#id,#root.args[0] @CachePut // 每次调用方法,都会刷新缓存。默认是调用方法后刷新;属性可以使用 ......

注解:

  @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);