package com.weather.common.redis; import jakarta.annotation.Resource; import org.springframework.data.redis.core.HashOperations; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; import java.util.Collection; import java.util.Map; import java.util.concurrent.TimeUnit; /** * Redis工具类 * * @author 123 */ @Component public class RedisUtils { @Resource private RedisTemplate redisTemplate; /** 默认过期时长为24小时,单位:秒 */ public final static long DEFAULT_EXPIRE = 60 * 60 * 24L; /** 过期时长为1小时,单位:秒 */ public final static long HOUR_ONE_EXPIRE = 60 * 60 * 1L; /** 过期时长为6小时,单位:秒 */ public final static long HOUR_SIX_EXPIRE = 60 * 60 * 6L; /** 不设置过期时长 */ public final static long NOT_EXPIRE = -1L; public void set(String key, Object value, long expire) { redisTemplate.opsForValue().set(key, value); if (expire != NOT_EXPIRE) { expire(key, expire); } } public void set(String key, Object value) { set(key, value, DEFAULT_EXPIRE); } public Object get(String key, long expire) { Object value = redisTemplate.opsForValue().get(key); if (expire != NOT_EXPIRE) { expire(key, expire); } return value; } public Object get(String key) { return get(key, NOT_EXPIRE); } public void delete(String key) { redisTemplate.delete(key); } public void delete(Collection keys) { redisTemplate.delete(keys); } public Object hGet(String key, String field) { return redisTemplate.opsForHash().get(key, field); } public Map hGetAll(String key) { HashOperations hashOperations = redisTemplate.opsForHash(); return hashOperations.entries(key); } public void hMSet(String key, Map map) { hMSet(key, map, DEFAULT_EXPIRE); } public void hMSet(String key, Map map, long expire) { redisTemplate.opsForHash().putAll(key, map); if (expire != NOT_EXPIRE) { expire(key, expire); } } public void hSet(String key, String field, Object value) { hSet(key, field, value, DEFAULT_EXPIRE); } public void hSet(String key, String field, Object value, long expire) { redisTemplate.opsForHash().put(key, field, value); if (expire != NOT_EXPIRE) { expire(key, expire); } } public void expire(String key, long expire) { redisTemplate.expire(key, expire, TimeUnit.SECONDS); } public void hDel(String key, Object... fields) { redisTemplate.opsForHash().delete(key, fields); } public void leftPush(String key, Object value) { leftPush(key, value, DEFAULT_EXPIRE); } public void leftPush(String key, Object value, long expire) { redisTemplate.opsForList().leftPush(key, value); if (expire != NOT_EXPIRE) { expire(key, expire); } } public Object rightPop(String key) { return redisTemplate.opsForList().rightPop(key); } /** * 按模式删除缓存 * @param pattern 匹配模式,如 "weather:summarize:*" */ public void deleteByPattern(String pattern) { java.util.Set keys = redisTemplate.keys(pattern); if (keys != null && !keys.isEmpty()) { redisTemplate.delete(keys); } } /** * 判断缓存是否存在 */ public boolean exists(String key) { Boolean result = redisTemplate.hasKey(key); return Boolean.TRUE.equals(result); } }