1.增加Maven配置:

		<!--二级缓存 -->
        <dependency>
            <groupId>com.alicp.jetcache</groupId>
            <artifactId>jetcache-starter-redis-lettuce</artifactId>
            <version>2.6.0.M1</version>
        </dependency>

2.配置文件内容:

1.使用实例:

# 二级缓存
jetcache:
  areaInCacheName: false  # 是否加入缓存key前缀
  local:
    default:
      keyConvertor: fastjson  
      type: linkedhashmap   # 缓存类型。tair、redis为当前支持的远程缓存;linkedhashmap、caffeine为当前支持的本地缓存类型
  remote:
    default:
      type: redis.lettuce #使用lettuce
      keyConvertor: fastjson  # Key的转换器
      uri:
        - redis://redis-node1-t1.yh.test:7001 #redis://密码@IP:端口/- redis://redis-node1-t1.yh.test:7002
        - redis://redis-node2-t1.yh.test:7001
        - redis://redis-node2-t1.yh.test:7002
        - redis://redis-node3-t1.yh.test:7001
        - redis://redis-node3-t1.yh.test:7002
      readFrom: masterPreferred
      valueDecoder: java  # 采用Java序列化存储
      valueEncoder: java
      poolConfig:
        minIdle: 1
        maxIdle: 50
        maxTotal: 1000
        maxWait: 1000
  statIntervalMinutes: 15  # 控制台输出统计数据,统计间隔,0表示不统计

remote 表示远程缓存
local表示本地缓存

2.配置通用说明如下

属性默认值说明
jetcache.statIntervalMinutes0统计间隔,0表示不统计
jetcache.areaInCacheNametruejetcache-anno把cacheName作为远程缓存key前缀,2.4.3以前的版本总是把areaName加在cacheName中,因此areaName也出现在key前缀中。2.4.4以后可以配置,为了保持远程key兼容默认值为true,但是新项目的话false更合理些。
jetcache.hiddenPackages@Cached和@CreateCache自动生成name的时候,为了不让name太长,hiddenPackages指定的包名前缀被截掉
jetcache.[local/remote].${area}.type缓存类型。tair、redis为当前支持的远程缓存;linkedhashmap、caffeine为当前支持的本地缓存类型
jetcache.[local/remote].${area}.keyConvertorkey转换器的全局配置,当前只有一个已经实现的keyConvertor:fastjson。仅当使用@CreateCache且缓存类型为LOCAL时可以指定为none,此时通过equals方法来识别key。方法缓存必须指定keyConvertor
jetcache.[local/remote].${area}.valueEncoderjava序列化器的全局配置。仅remote类型的缓存需要指定,可选java和kryo
jetcache.[local/remote].${area}.valueDecoderjava序列化器的全局配置。仅remote类型的缓存需要指定,可选java和kryo
jetcache.[local/remote].${area}.limit100每个缓存实例的最大元素的全局配置,仅local类型的缓存需要指定。注意是每个缓存实例的限制,而不是全部,比如这里指定100,然后用@CreateCache创建了两个缓存实例(并且注解上没有设置localLimit属性),那么每个缓存实例的限制都是100
jetcache.[local/remote].${area}.expireAfterWriteInMillis无穷大以毫秒为单位指定超时时间的全局配置(以前为defaultExpireInMillis)
jetcache.local.${area}.expireAfterAccessInMillis0需要jetcache2.2以上,以毫秒为单位,指定多长时间没有访问,就让缓存失效,当前只有本地缓存支持。0表示不使用这个功能。

上表中${area}对应@Cached和@CreateCache的area属性。注意如果注解上没有指定area,默认值是"default"。

关于缓存的超时时间,有多个地方指定,澄清说明一下:

①put等方法上指定了超时时间,则以此时间为准
②put等方法上未指定超时时间,使用Cache实例的默认超时时间
③Cache实例的默认超时时间,通过在@CreateCache和@Cached上的expire属性指定,如果没有指定,使用yml中定义的全局配置,例如:
@Cached(cacheType=local)使用jetcache.local.default.expireAfterWriteInMillis,如果仍未指定则是无穷大

3.启动类

package com.cdp;

import com.alicp.jetcache.anno.config.EnableCreateCacheAnnotation;
import com.alicp.jetcache.anno.config.EnableMethodCache;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan(basePackages = {"com.cdp.mybatis"})
//用于激活@Cached注解的使用
@EnableMethodCache(basePackages = "com.cdp")
//用于激活@CreateCache注解的使用
@EnableCreateCacheAnnotation
public class CDPDataSourceApplication {
    public static void main(String[] args) {
        SpringApplication.run(CDPDataSourceApplication.class, args);
    }
}

@EnableMethodCache
用于激活@Cached注解的使用
@EnableCreateCacheAnnotation
用于激活@CreateCache注解的使用

4.@CreateCache使用

逻辑:先查看缓存中是否有数据,如果没数据,去查mysql数据库,放入缓存,如果有数据,直接返回。
1. 获取缓存
在这里插入图片描述

  1. 存入缓存
    在这里插入图片描述
    3. 实体必须序列化
    在这里插入图片描述
    泛型实体也必须序列化
    在这里插入图片描述
    4. @CreateCache属性表
属性默认值默认值
area“default”如果需要连接多个缓存系统,可在配置多个cache area,这个属性指定要使用的那个area的name
name未定义指定缓存的名称,不是必须的,如果没有指定,会使用类名+方法名。name会被用于远程缓存的key前缀。另外在统计中,一个简短有意义的名字会提高可读性。如果两个@CreateCache的name和area相同,它们会指向同一个Cache实例
expire未定义该Cache实例的默认超时时间定义,注解上没有定义的时候会使用全局配置,如果此时全局配置也没有定义,则取无穷大
timeUnitTimeUnit.SECONDS指定expire的单位
cacheTypeCacheType.REMOTE缓存的类型,包括CacheType.REMOTE 表示远程缓存 、CacheType.LOCAL 表示本地缓存 、CacheType.BOTH,如果定义为BOTH,会使用LOCAL和REMOTE组合成两级缓存
localLimit未定义如果cacheType为CacheType.LOCAL或CacheType.BOTH,这个参数指定本地缓存的最大元素数量,以控制内存占用。注解上没有定义的时候会使用全局配置,如果此时全局配置也没有定义,则取100
serialPolicy未定义如果cacheType为CacheType.REMOTE或CacheType.BOTH,指定远程缓存的序列化方式。JetCache内置的可选值为SerialPolicy.JAVA和SerialPolicy.KRYO。注解上没有定义的时候会使用全局配置,如果此时全局配置也没有定义,则取SerialPolicy.JAVA
keyConvertor未定义指定KEY的转换方式,用于将复杂的KEY类型转换为缓存实现可以接受的类型,JetCache内置的可选值为KeyConvertor.FASTJSON和KeyConvertor.NONE。NONE表示不转换,FASTJSON通过fastjson将复杂对象KEY转换成String。如果注解上没有定义,则使用全局配置。

5.@Cached使用

@Cached(name="getUser.", key="#id", expire = 8, cacheType=CacheType.BOTH)
@Override
public User getUser(Long id) {
	User user = new User();
	user.setId(1L);
	user.setName("yinjihuan");
	return user;
}
  • name
    缓存名称
  • key
    缓存key,追加到name后面构成唯一的缓存key, 使用SpEL指定key,如果没有指定会根据所有参数自动生成。
  • expire
    缓存失效时间
  • cacheType
    缓存的类型,包括CacheType.REMOTE、CacheType.LOCAL、CacheType.BOTH。
    说明:
    CacheType.REMOTE 表示远程缓存 、CacheType.LOCAL 表示本地缓存 、CacheType.BOTH,如果定义为BOTH,会使用LOCAL和REMOTE组合成两级缓存
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐