类 MemorySohelpCacheProvider

java.lang.Object
net.sohelp.boot.admin.core.cache.provider.MemorySohelpCacheProvider
所有已实现的接口:
SohelpCacheProvider

public class MemorySohelpCacheProvider extends Object implements SohelpCacheProvider
内存缓存实现

基于 Hutool TimedCache,支持 TTL 配置。

  • TTL ≤ 0:永不过期(等效于原有 ConcurrentHashMap 行为)
  • TTL > 0:指定秒数后自动过期

内部在每次读写操作前调用 StampedCache.prune() 清理过期条目, 以保证查询结果的准确性。

从以下版本开始:
2026-03-23
作者:
AaronFung
  • 构造器详细资料

    • MemorySohelpCacheProvider

      public MemorySohelpCacheProvider(long defaultTtlSeconds)
      构造内存缓存提供者

      初始化 Hutool TimedCache 实例。将秒级 TTL 转换为毫秒后传入, TTL 为 0 或负数时,TimedCache 的 timeout 设为 0,表示永不过期。

      参数:
      defaultTtlSeconds - 默认 TTL(秒),0 或负数表示永不过期
  • 方法详细资料

    • get

      public Object get(String key)
      获取缓存值

      根据给定的缓存键查询对应的缓存值。若缓存未命中(key 不存在或已过期), 则返回 null

      先清理过期条目,再从缓存中获取值。使用 false 参数表示不更新最后访问时间, 以保持原始的过期策略。

      指定者:
      get 在接口中 SohelpCacheProvider
      参数:
      key - 缓存键,不允许为 null
      返回:
      缓存值;未命中或已过期时返回 null
    • put

      public void put(String key, Object value)
      写入缓存(使用构造时设定的默认 TTL)

      将键值对存入缓存,过期时间采用实例创建时指定的默认 TTL。 若 key 已存在,则覆盖旧值并重置过期时间。

      使用构造时设定的默认 TTL 写入缓存。先清理过期条目, 然后根据默认 TTL 是否大于 0 决定是否设置过期时间。

      指定者:
      put 在接口中 SohelpCacheProvider
      参数:
      key - 缓存键,不允许为 null
      value - 缓存值
    • put

      public void put(String key, Object value, long ttlSeconds)
      写入缓存并指定 TTL

      将键值对存入缓存,并使用调用方显式指定的 TTL 作为过期时间。 若 key 已存在,则覆盖旧值并重置过期时间。

      使用调用方指定的 TTL 写入缓存。先清理过期条目, 然后根据传入的 TTL 是否大于 0 决定是否设置过期时间。

      指定者:
      put 在接口中 SohelpCacheProvider
      参数:
      key - 缓存键,不允许为 null
      value - 缓存值
      ttlSeconds - TTL(秒),0 或负数表示永不过期
    • remove

      public void remove(String key)
      删除指定缓存项

      从缓存中移除给定 key 对应的键值对。若 key 不存在,则不做任何操作。

      从内存缓存中移除指定 key 对应的条目。若 key 不存在,则不做任何操作。

      指定者:
      remove 在接口中 SohelpCacheProvider
      参数:
      key - 缓存键,不允许为 null
    • clear

      public void clear()
      清空该命名空间下的所有缓存

      移除当前缓存实例管理的全部键值对。对于 Redis 实现, 仅清除当前命名空间前缀下的 key,不影响其他命名空间。

      清空内存缓存中的所有键值对。

      指定者:
      clear 在接口中 SohelpCacheProvider
    • contains

      public boolean contains(String key)
      判断指定 key 是否存在且未过期

      检查给定的缓存键是否仍然有效(存在且未超过 TTL)。

      先清理过期条目,然后通过尝试获取值来判断 key 是否存在且未过期。

      指定者:
      contains 在接口中 SohelpCacheProvider
      参数:
      key - 缓存键,不允许为 null
      返回:
      true 表示 key 存在且未过期;false 表示不存在或已过期
    • isEnabled

      public boolean isEnabled()
      是否启用缓存

      NONE 模式返回 false,调用方应检查此标志并直接查询数据库, 避免无效缓存逻辑。MEMORY 和 REDIS 模式均返回 true

      内存缓存始终处于启用状态。

      指定者:
      isEnabled 在接口中 SohelpCacheProvider
      返回:
      始终返回 true
    • size

      public int size()
      获取当前缓存中的 key 数量

      返回当前命名空间下有效(未过期)的缓存条目数。

      先清理过期条目,再返回剩余有效缓存条目的数量。

      指定者:
      size 在接口中 SohelpCacheProvider
      返回:
      当前有效的缓存条目数量
    • keys

      public Set<String> keys()
      获取当前命名空间下所有缓存 key(不含前缀)

      返回当前缓存实例管理的所有有效 key 集合。对于 Redis 实现, 返回的 key 已去除命名空间前缀。

      先清理过期条目,再返回所有有效 key 的集合。

      指定者:
      keys 在接口中 SohelpCacheProvider
      返回:
      所有有效缓存 key 的集合,不会返回 null
    • getType

      public String getType()
      获取缓存提供者类型名称

      用于日志输出、监控等场景,标识当前使用的缓存类型。

      指定者:
      getType 在接口中 SohelpCacheProvider
      返回:
      固定返回 "MEMORY",标识当前为内存缓存实现