类 RedisSohelpCacheProvider
- 所有已实现的接口:
SohelpCacheProvider
使用 RedisTemplate<String, Object> + Jackson 序列化,
通过 GenericJackson2JsonRedisSerializer 自动保留对象类型信息,
存取时无需手动 JSON 转换。
Redis Key 格式:sohelp_cache:{namespace}:{key}
所有 Redis 操作均捕获异常并记录警告日志,避免缓存故障影响业务主流程。
- 从以下版本开始:
- 2026-03-23
- 作者:
- AaronFung
-
构造器概要
构造器构造器说明RedisSohelpCacheProvider(org.springframework.data.redis.core.RedisTemplate<String, Object> redisTemplate, String namespace, long defaultTtlSeconds) 构造 Redis 缓存提供者 -
方法概要
-
构造器详细资料
-
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 序列化),不允许为nullnamespace- 缓存命名空间(用于 Key 前缀,各缓存互不干扰),不允许为nulldefaultTtlSeconds- 默认 TTL(秒),0 或负数表示永不过期
-
-
方法详细资料
-
get
获取缓存值根据给定的缓存键查询对应的缓存值。若缓存未命中(key 不存在或已过期), 则返回
null。通过
RedisTemplate.opsForValue()获取缓存值。 若 Redis 操作发生异常(如连接超时),捕获异常并记录警告日志,返回null, 避免缓存故障影响业务。- 指定者:
get在接口中SohelpCacheProvider- 参数:
key- 缓存键,不允许为null- 返回:
- 缓存值;未命中或 Redis 异常时返回
null
-
put
写入缓存(使用构造时设定的默认 TTL)将键值对存入缓存,过期时间采用实例创建时指定的默认 TTL。 若 key 已存在,则覆盖旧值并重置过期时间。
委托给
put(String, Object, long)方法,使用构造时设定的默认 TTL。- 指定者:
put在接口中SohelpCacheProvider- 参数:
key- 缓存键,不允许为nullvalue- 缓存值
-
put
写入缓存并指定 TTL将键值对存入缓存,并使用调用方显式指定的 TTL 作为过期时间。 若 key 已存在,则覆盖旧值并重置过期时间。
通过
RedisTemplate.opsForValue()写入缓存值。 当 TTL 大于 0 时设置过期时间,否则永不过期。 若 Redis 操作发生异常,捕获异常并记录警告日志,避免缓存故障影响业务。- 指定者:
put在接口中SohelpCacheProvider- 参数:
key- 缓存键,不允许为nullvalue- 缓存值ttlSeconds- TTL(秒),0 或负数表示永不过期
-
remove
删除指定缓存项从缓存中移除给定 key 对应的键值对。若 key 不存在,则不做任何操作。
通过
RedisTemplate.delete(Object)删除指定的 Redis Key。- 指定者:
remove在接口中SohelpCacheProvider- 参数:
key- 缓存键,不允许为null
-
clear
public void clear()清空该命名空间下的所有缓存移除当前缓存实例管理的全部键值对。对于 Redis 实现, 仅清除当前命名空间前缀下的 key,不影响其他命名空间。
通过通配符
keyPrefix + "*"扫描当前命名空间下的所有 key,然后批量删除。 仅清除当前命名空间的数据,不影响其他命名空间。- 指定者:
clear在接口中SohelpCacheProvider
-
contains
判断指定 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
获取当前命名空间下所有缓存 key(不含前缀)返回当前缓存实例管理的所有有效 key 集合。对于 Redis 实现, 返回的 key 已去除命名空间前缀。
通过通配符扫描当前命名空间下的所有 key,去除前缀后返回纯业务 key 集合。
- 指定者:
keys在接口中SohelpCacheProvider- 返回:
- 去除命名空间前缀后的业务 key 集合,不会返回
null;无数据时返回空集合
-
getType
获取缓存提供者类型名称用于日志输出、监控等场景,标识当前使用的缓存类型。
- 指定者:
getType在接口中SohelpCacheProvider- 返回:
- 固定返回
"REDIS",标识当前为 Redis 缓存实现
-