类 RedisSohelpCacheProvider

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

public class RedisSohelpCacheProvider extends Object implements SohelpCacheProvider
Redis 缓存实现

使用 RedisTemplate<String, Object> + Jackson 序列化, 通过 GenericJackson2JsonRedisSerializer 自动保留对象类型信息, 存取时无需手动 JSON 转换。

Redis Key 格式:sohelp_cache:{namespace}:{key}

所有 Redis 操作均捕获异常并记录警告日志,避免缓存故障影响业务主流程。

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

    • RedisSohelpCacheProvider

      public RedisSohelpCacheProvider(org.springframework.data.redis.core.RedisTemplate<String,Object> redisTemplate, String namespace, long defaultTtlSeconds)
      构造 Redis 缓存提供者

      根据传入的命名空间生成 Redis Key 前缀,格式为 sohelp_cache:{namespace}:, 确保不同业务模块的缓存数据互不干扰。

      参数:
      redisTemplate - Spring RedisTemplate 实例(已配置 Jackson 序列化),不允许为 null
      namespace - 缓存命名空间(用于 Key 前缀,各缓存互不干扰),不允许为 null
      defaultTtlSeconds - 默认 TTL(秒),0 或负数表示永不过期
  • 方法详细资料

    • get

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

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

      通过 RedisTemplate.opsForValue() 获取缓存值。 若 Redis 操作发生异常(如连接超时),捕获异常并记录警告日志,返回 null, 避免缓存故障影响业务。

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

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

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

      委托给 put(String, Object, long) 方法,使用构造时设定的默认 TTL。

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

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

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

      通过 RedisTemplate.opsForValue() 写入缓存值。 当 TTL 大于 0 时设置过期时间,否则永不过期。 若 Redis 操作发生异常,捕获异常并记录警告日志,避免缓存故障影响业务。

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

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

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

      通过 RedisTemplate.delete(Object) 删除指定的 Redis Key。

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

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

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

      通过通配符 keyPrefix + "*" 扫描当前命名空间下的所有 key,然后批量删除。 仅清除当前命名空间的数据,不影响其他命名空间。

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

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

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

      通过 RedisTemplate.hasKey(Object) 检查 key 是否存在于 Redis 中。

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

      public boolean isEnabled()
      是否启用缓存

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

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

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

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

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

      通过通配符 keyPrefix + "*" 扫描当前命名空间下的所有 key 并返回数量。

      指定者:
      size 在接口中 SohelpCacheProvider
      返回:
      当前命名空间下的缓存条目数量;扫描结果为 null 时返回 0
    • keys

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

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

      通过通配符扫描当前命名空间下的所有 key,去除前缀后返回纯业务 key 集合。

      指定者:
      keys 在接口中 SohelpCacheProvider
      返回:
      去除命名空间前缀后的业务 key 集合,不会返回 null;无数据时返回空集合
    • getType

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

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

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