package com.sqx.common.utils; import org.springframework.data.redis.core.HashOperations; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.script.DefaultRedisScript; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.Arrays; import java.util.Collection; import java.util.Date; import java.util.Map; import java.util.Set; import java.util.concurrent.TimeUnit; /** * Redis工具类 * */ @Component public class RedisUtils { @Resource private RedisTemplate redisTemplate; /** * 默认过期时长为24小时,单位:秒 */ public final static long DEFAULT_EXPIRE = 60 * 60 * 24; /** * 过期时长为6小时,单位:秒 */ public final static long HOUR_SIX_EXPIRE = 60 * 60 * 6L; /** * 过期时长为1小时,单位:秒 */ public final static long HOUR_ONE_EXPIRE = 60 * 60 * 1L; /** * 过期时长为半小时,单位:秒 */ public final static long HALF_HOUR_ONE_EXPIRE = 30 * 60 * 1L; /** * 过期时长为10分钟时,单位:秒 */ public final static long TEN_MINUTE_ONE_EXPIRE = 10 * 60 * 1L; /** 不设置过期时长 */ public final static long NOT_EXPIRE = -1; 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) { redisTemplate.opsForValue().set(key, value); } 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 Long increment(String key) { return redisTemplate.opsForValue().increment(key); } public Boolean hasKey(String key) { return redisTemplate.hasKey(key); } public Set keys(String pattern) { return redisTemplate.keys(pattern); } 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 expireAt(String key, Date expire) { redisTemplate.expireAt(key, expire); } public Long getExpire(String key) { return redisTemplate.getExpire(key, 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); } public Long execute(String key, String script, Object... args) { return redisTemplate.execute(new DefaultRedisScript<>(script, Long.class), Arrays.asList(key), args); } }