数据缓存
[一]数据缓存配置
前缀:herodotus.cache
allow-null-values
- Type:
Boolean
- Default:
true
是否允许缓存空值。基于 Spring Cache 接口扩展的 Cache 都涉及这个选项。
separator
- Type:
String
- Default:
-
缓存名称转换分割符。默认值,"-"。默认缓存名称采用 Redis Key 格式(使用 ":" 分割),使用 ":" 分割的字符串作为Map的Key,":" 会被去除不显示。指定一个分隔符,用于在创建多级缓存时,将缓存Key 中的字符替换为可使用的字符
instances
- Type:
Map<String, CacheSetting>
- Default:
null
Dante Cloud
选择 JetCache 作为系统数据 多级缓存
核心组件。对其进行封装与 JPA (Hibernate) 整合,形成一套完整的缓存系统。在 JPA 中默认是在实体中进行缓存的配置,Dante Cloud
也提供 Spring Boot Properties 进行配置。但这些配置只能是全局统一配置,无法针对不同的实体做不同的缓存定义。
Dante Cloud
为了方便区分和管理缓存,是通过手动定义静态变量的方式,手动指定每个 JPA 实例对应的缓存。instances
针对不同实体单独设置的过期时间,如果不设置,则统一使用默认时间。
示例:
herodotus:
cache:
instances:
data-upms-sys-employee-:
expire: 2h
说明:
上例中,是对系统中 SysEmployee
实体进行独立的缓存设置。SysEmployee
实体的缓存 Key 为:data:upms:sys:employee
注
因为要支持 Redis,各 JPA 实例缓存 Key 的定义是按照 Redis 标准 Key 的方式定义(“:” 分隔)。可通过各个 JPA 实例的定义中找到 KEY值。但是为了解决Redis 标准 KEY 存入 Map 中出错误的问题,需要将 “:” 替换为 “-”。具体用什么字符串替换,可以参见前面的配置 【separator】
[二]实例缓存配置
即 herodotus.cache.instances
配置,对应的值类型,对应代码中的中 CacheSetting
类
前缀:herodotus.cache.instance[key]
area
- Type:
String
- Default:
default
指定缓存区域,与 JetCache Area 配置对应。如果需要连接多个缓存系统,可在配置多个cache area,这个属性指定要使用的那个area的name
method
- Type:
Enum
- Values:
REMOTE
,LOCAL
和BOTH
- Default:
BOTH
设置缓存类型。对应 JetCache 的 CacheType.REMOTE
、CacheType.LOCAL
、CacheType.BOTH
。
REMOTE
:只在远程缓存中存储数据。当前默认为 Redis。LOCAL
:只在服务本地缓存中存储数据。当前默认为 Caffeine。BOTH
:同时在本地和远程缓存中存储数据,组合成两级缓存。
expire
- Type:
Duration
- Default: 2h
缓存有效周期(超时时间)。Cache实例的默认超时时间定义,注解上没有定义的时候会使用全局配置,如果此时全局配置也没有定义,则取无穷大。当前默认设置为 2 小时。
注
需要使用 Spring Boot Duration 类型参数配置的格式进行配置
- ns for nanoseconds (纳秒)
- us for microseconds (微秒)
- ms for milliseconds (毫秒)
- s for seconds (秒)
- m for minutes (分)
- h for hours (时)
- d for days (天)
sync
- Type:
Boolean
- Default:
false
是否开启多实例本地缓存同步,默认不开启。仅在多级缓存模式下生效,即:method
参数值为 BOTH
。采用 Redis 的 pub/sub 机制,在多实例的情况下,开启 sync 会同步各实例缓存数据
local-expire
- Type:
Duration
- Default:
null
本地缓存过期时间。当前默认指代的是本地 Caffeine
缓存数据过期时间。默认值 null
,即数据永不过期。
Caffeine 数据存放在内存中,服务停止数据就被清理了,所以设置为永不过期影响并不大。除非说,您的服务永远不会停止或者重新部署。
local-limit
- Type:
Integer
- Default:
null
如果 method
为 CacheType.LOCAL
或 CacheType.BOTH
,这个参数指定本地缓存 Caffeine 的最大元素数量,以控制内存占用。注解上没有定义的时候会使用全局配置,如果此时全局配置也没有定义,则取100
penetration-protect
- Type:
Boolean
- Default:
true
是否开启缓存穿透保护。默认开启。
penetration-protect-timeout
- Type:
Duration
- Default: 2h
缓存穿透保护有效期,默认:2 小时。与 JetCache Area 配置对应
注
需要使用 Spring Boot Duration 类型参数配置的格式进行配置
- ns for nanoseconds (纳秒)
- us for microseconds (微秒)
- ms for milliseconds (毫秒)
- s for seconds (秒)
- m for minutes (分)
- h for hours (时)
- d for days (天)