锋翎文档
Java SDK高级话题

缓存策略

Caffeine 内存缓存配置与说明

缓存策略

SDK 使用 Caffeine 进行高性能内存缓存,以提升性能和减少对 SSO Server 的请求。

缓存架构

缓存配置

SDK 内置 6 个缓存实例,每个缓存有不同的用途和 TTL 配置:

缓存列表

缓存名称说明TTL最大容量
oauthStateOAuth2 State + PKCE Verifier15 分钟10,000
grpcUserinfogRPC 用户信息10 秒10,000
grpcMerchantTag商户标签10 秒10,000
grpcAnnouncement公告信息10 秒10,000
httpUserinfoHTTP 用户信息10 秒10,000
httpIntrospectionToken 自省结果10 秒10,000

缓存 Bean 名为 beaconSsoCacheManager,基于 Spring 的 CaffeineCacheManager 实现。所有缓存在应用重启后会自动失效。

与 Go SDK 的对比

Java SDK 使用 Caffeine(进程内内存缓存),Go SDK 使用 Redis(分布式缓存)。两者的缓存策略有本质区别:

对比项Java SDK (Caffeine)Go SDK (Redis)
存储位置JVM 进程内内存Redis 服务
分布式支持不支持(单实例)支持(跨实例共享)
缓存失效进程重启即失效基于 TTL 过期
外部依赖需要 Redis
数据一致性各实例独立缓存多实例共享同一份缓存

影响说明

  • 无分布式缓存失效:各应用实例拥有独立的缓存副本,某个实例缓存的数据变更不会自动同步到其他实例
  • 适用场景:适合单实例部署或无状态部署(如 K8s Pod),每个实例独立维护缓存
  • TTL 较短:大部分缓存 TTL 为 10 秒,确保数据不会长期不一致

OAuthState 实体

OAuth2 流程中用于存储 State 和 PKCE 信息的缓存实体:

字段类型说明
stateString随机状态码
codeVerifierStringPKCE Code Verifier
redirectUriString回调地址
createdAtInstant创建时间
expiresAtInstant过期时间

方法

方法返回值说明
isExpired()boolean判断 OAuthState 是否已过期

On this page