Skip to content

Redis 缓存

使用缓存

Bean中注入 RedisCache 即可使用

@Service
public class XxxServiceRedisImpl implements XxxServiceRedis {

    @Resource
    private RedisCache redisCache;

    @Override
    public void set(String s, String s1, long l) {
        redisCache.setCacheObject(s,s1,l, TimeUnit.SECONDS);
    }
}

自定义RedisCache

lihua-common/src/main/java/com/lihua/cache/RedisCache.java 封装了 RedisTemplate 可根据业务需要自行增加工具方法

@Slf4j
@Component
public class RedisCache {

    @Resource
    private RedisTemplate<String, Object> redisTemplate;

    @Resource
    private ObjectMapper objectMapper;

    /**
     * 缓存数据
     * @param key 缓存key
     * @param value 缓存值
     */
    public <T> void setCacheObject(String key,T value) {
        redisTemplate.opsForValue().set(key, value);
    }

    // ... 省略

    /**
     * 获取 key 对应的value在redis中对应的数据类型
     * @return 返回值包括:string、list、set、hash、zset等
     */
    public String getRedisType(String key) {
        return Objects.requireNonNull(redisTemplate.type(key)).code();
    }
}

统一维护RedisKey前缀

lihua-common/src/main/java/com/lihua/enums/RedisKeyPrefixEnum.java 中维护了系统Redis前缀,业务中有需要缓存时,推荐在此枚举中进行统一维护

在此枚举中维护的前缀可通过「系统监控」-「缓存监控」进行具体类型的维护

不在此枚举中维护的前缀会在「系统监控」-「缓存监控」的OTHER类型中维护

/**
 * Redis-Key前缀枚举
 */
@Getter
@AllArgsConstructor
public enum RedisKeyPrefixEnum {

    LOGIN_USER_REDIS_PREFIX("REDIS_CACHE_LOGIN_USER:", "登录用户"),

    DICT_DATA_REDIS_PREFIX("REDIS_CACHE_DICT_DATA:", "系统字典"),

    SYSTEM_SETTING_REDIS_PREFIX("REDIS_CACHE_SYSTEM_SETTING:", "系统设置"),

    SYSTEM_IP_BLACKLIST_REDIS_PREFIX("REDIS_CACHE_IP_BLACKLIST:", "IP黑名单"),

    PREVENT_DUPLICATE_SUBMIT_REDIS_PREFIX("REDIS_CACHE_REQUEST_SUBMIT:", "防重复提交"),

    CAPTCHA_REDIS_PREFIX("REDIS_CACHE_CAPTCHA:", "验证码"),

    SECONDARY_CAPTCHA_REDIS_PREFIX("REDIS_CACHE_SECONDARY_CAPTCHA:", "验证码二次验证"),

    CHUNK_UPLOAD_ID_REDIS_PREFIX("REDIS_CACHE_CHUNK_UPLOAD_ID:", "分片上传uploadId"),

    CHECK_PASSWORD_REDIS_PREFIX("REDIS_CACHE_CHECK_PASSWORD:", "检测密码"),

    ONCE_TOKEN_REDIS_PREFIX("REDIS_CACHE_ONCE_TOKEN:", "一次性令牌"),

    // 业务需要,非真实 redis key
    OTHER("OTHER", "其他");

    private final String value;
    private final String label;

    /**
     * 获取全部枚举
     */
    public static List<RedisKeyPrefixEnum> getRedisKeyPrefix() {
        return new ArrayList<>(Arrays.asList(values()));
    }
}

使用方式

RedisKeyPrefixEnum.XXX_REDIS_PREFIX.getValue() + 标识 形式使用,例:

/**
 * 设置字典缓存
 */
public static <T> void setDictCache(String dictTypeCode, List<SysDictDataVO> dictValue) {
    redisCache.setCacheList(RedisKeyPrefixEnum.DICT_DATA_REDIS_PREFIX.getValue() + dictTypeCode, dictValue);
}