|
|
@@ -0,0 +1,173 @@
|
|
|
+package cn.qinys.platform.base.utils;
|
|
|
+
|
|
|
+import jakarta.annotation.Resource;
|
|
|
+import org.springframework.data.redis.core.RedisTemplate;
|
|
|
+import org.springframework.stereotype.Component;
|
|
|
+import org.springframework.util.StringUtils;
|
|
|
+
|
|
|
+
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.Set;
|
|
|
+import java.util.concurrent.TimeUnit;
|
|
|
+
|
|
|
+/**
|
|
|
+ * Description:
|
|
|
+ *
|
|
|
+ * @author tanlie
|
|
|
+ * Date: 2024/1/9 9:08
|
|
|
+ */
|
|
|
+@Component
|
|
|
+public class RedisUtils {
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private RedisTemplate<String, Object> redisTemplate;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 分布式锁过期时间
|
|
|
+ */
|
|
|
+ private final long EXPIRE_TIME = 5 * 10000;
|
|
|
+
|
|
|
+ public Object get(String key) {
|
|
|
+ return redisTemplate.opsForValue().get(key);
|
|
|
+ }
|
|
|
+
|
|
|
+ public void set(String key, Object obj) {
|
|
|
+ redisTemplate.opsForValue().set(key, obj);
|
|
|
+ }
|
|
|
+
|
|
|
+ public void set(String key, Object obj, long expire) {
|
|
|
+ redisTemplate.opsForValue().set(key, obj, expire, TimeUnit.SECONDS);
|
|
|
+ }
|
|
|
+
|
|
|
+ public Boolean delete(String key) {
|
|
|
+ return redisTemplate.delete(key);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public Long delete(List<String> keys) {
|
|
|
+ return redisTemplate.delete(keys);
|
|
|
+ }
|
|
|
+
|
|
|
+ public Long delete(Set<String> keys) {
|
|
|
+ return redisTemplate.delete(keys);
|
|
|
+ }
|
|
|
+
|
|
|
+ public Long lPush(String key, Object... obj) {
|
|
|
+ return redisTemplate.opsForList().leftPush(key, obj);
|
|
|
+ }
|
|
|
+
|
|
|
+ public Long rPush(String key, Object... obj) {
|
|
|
+ return redisTemplate.opsForList().rightPush(key, obj);
|
|
|
+ }
|
|
|
+
|
|
|
+ public Object lPop(String key) {
|
|
|
+ return redisTemplate.opsForList().leftPop(key);
|
|
|
+ }
|
|
|
+
|
|
|
+ public Object rPop(String key) {
|
|
|
+ return redisTemplate.opsForList().rightPop(key);
|
|
|
+ }
|
|
|
+
|
|
|
+ public Boolean exists(String key) {
|
|
|
+ return redisTemplate.hasKey(key);
|
|
|
+ }
|
|
|
+
|
|
|
+ public Long ttl(String key) {
|
|
|
+ return redisTemplate.getExpire(key, TimeUnit.SECONDS);
|
|
|
+ }
|
|
|
+
|
|
|
+ public void expire(String key, Long timeout) {
|
|
|
+ redisTemplate.expire(key, timeout, TimeUnit.SECONDS);
|
|
|
+ }
|
|
|
+
|
|
|
+ public Map<Object, Object> hGetAll(String key) {
|
|
|
+ return redisTemplate.opsForHash().entries(key);
|
|
|
+ }
|
|
|
+
|
|
|
+ public void hPut(String key, Object field, Object obj) {
|
|
|
+ this.redisTemplate.opsForHash().put(key, field, obj);
|
|
|
+ }
|
|
|
+
|
|
|
+ public Object hGet(String key, String field) {
|
|
|
+ return redisTemplate.opsForHash().get(key, field);
|
|
|
+ }
|
|
|
+
|
|
|
+ public void hSet(String key, String field, Object value) {
|
|
|
+ redisTemplate.opsForHash().put(key, field, value);
|
|
|
+ }
|
|
|
+
|
|
|
+ public Long hDel(String key, Object... fields) {
|
|
|
+ return redisTemplate.opsForHash().delete(key, fields);
|
|
|
+ }
|
|
|
+
|
|
|
+ public Set<String> keys(String pattern) {
|
|
|
+ return redisTemplate.keys(pattern);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * redisTemplate删除迷糊匹配的key的缓存
|
|
|
+ */
|
|
|
+ public void deleteByPrefix(String prefix) {
|
|
|
+ Set<String> keys = redisTemplate.keys(prefix);
|
|
|
+ if (keys != null && !keys.isEmpty()) {
|
|
|
+ redisTemplate.delete(keys);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public boolean incr(String key, long delta) {
|
|
|
+ if (delta < 0) {
|
|
|
+ throw new RuntimeException("递增因子必须大于0");
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ redisTemplate.opsForValue().increment(key, delta);
|
|
|
+ return true;
|
|
|
+ } catch (Exception ex) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Redis加锁的操作
|
|
|
+ *
|
|
|
+ * @param key
|
|
|
+ * @param value
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public Boolean tryLock(String key, String value) {
|
|
|
+ if (redisTemplate.opsForValue().setIfAbsent(key, value, EXPIRE_TIME, TimeUnit.SECONDS)) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Redis加锁的操作
|
|
|
+ *
|
|
|
+ * @param key
|
|
|
+ * @param value
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public Boolean tryLock(String key, String value, long expireTime) {
|
|
|
+ if (redisTemplate.opsForValue().setIfAbsent(key, value, expireTime, TimeUnit.SECONDS)) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Redis解锁的操作
|
|
|
+ *
|
|
|
+ * @param key
|
|
|
+ * @param value
|
|
|
+ */
|
|
|
+ public void unlock(String key, String value) {
|
|
|
+ String currentValue = (String) redisTemplate.opsForValue().get(key);
|
|
|
+ try {
|
|
|
+ if (!StringUtils.isEmpty(currentValue) && currentValue.equals(value)) {
|
|
|
+ redisTemplate.opsForValue().getOperations().delete(key);
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|