package com.yunhai.userbase.utils; import java.util.function.Supplier; /** * @author chenx * @date 2026/1/6 20:54 * @description 通用缓存封装 */ public final class CacheKitUtils { private CacheKitUtils() {} /** * 泛型模板:先读缓存 → 没有则调用 loader → 回写缓存 → 返回结果 * * @param redisUtil 你的 RedisUtil * @param key 缓存键 * @param expireSec 过期秒数 * @param loader 实际业务加载器 * @param 返回值类型 * @return 缓存值或加载值 */ public static T getOrLoad(RedisUtil redisUtil, String key, int expireSec, Supplier loader) { // 1. 读缓存 if (redisUtil.hasKey(key)) { try { @SuppressWarnings("unchecked") T v = (T) redisUtil.get(key); if (v != null) { return v; } } catch (Exception e) { // 仅打印,继续走 loader e.printStackTrace(); } } // 2. 加载 T value = loader.get(); if (value == null) { return null; } // 3. 回写缓存 try { redisUtil.set(key, value, expireSec); } catch (Exception e) { // 缓存失败不影响主流程 e.printStackTrace(); } return value; } }