package com.tanpu.community.cache; import com.alibaba.fastjson.JSON; import com.tanpu.common.redis.RedisHelper; import com.tanpu.community.util.SpringUtils; import org.apache.commons.lang3.StringUtils; import java.time.Duration; import java.util.List; import java.util.function.Supplier; public class RedisCache { private String cacheName; private RedisHelper redisHelper; public<T> T getObject(String key, Integer expireSeconds, Supplier<T> func, Class<T> clz) { String value = get(key); // todo 考虑缓存穿透的问题. if (StringUtils.isNotBlank(value)) { return JSON.parseObject(value, clz); } T ret = func.get(); put(key, ret, expireSeconds); return ret; } public<T> List<T> getList(String key, Integer expireSeconds, Supplier<List<T>> func, Class<T> clz) { String value = get(key); if (StringUtils.isNotBlank(value)) { return JSON.parseArray(value, clz); } List<T> ret = func.get(); put(key, ret, expireSeconds); return ret; } private String get(String key) { key = cacheName + ":" + key; return redisHelper.get(key); } private void put(String key, Object obj, Integer expireSeconds) { if (obj == null) return; key = cacheName + ":" + key; String value = JSON.toJSONString(obj); if (expireSeconds == 0) { redisHelper.set(key, value); } else { redisHelper.set(key, value, Duration.ofSeconds(expireSeconds)); } } public static class Builder { RedisCache cache = new RedisCache(); public Builder cacheName(String cacheName) { cache.cacheName = cacheName; cache.redisHelper = SpringUtils.getBean(RedisHelper.class); return this; } public RedisCache build() { return cache; } } }