From 9486766c806fe1d9e082b2fd02ea1cc558f1b443 Mon Sep 17 00:00:00 2001 From: 无关风月 <443237572@qq.com> Date: 星期四, 08 五月 2025 09:21:57 +0800 Subject: [PATCH] bug修改 --- cloud-server-other/src/main/java/com/dsh/other/util/RedisUtil.java | 185 ++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 185 insertions(+), 0 deletions(-) diff --git a/cloud-server-other/src/main/java/com/dsh/other/util/RedisUtil.java b/cloud-server-other/src/main/java/com/dsh/other/util/RedisUtil.java new file mode 100644 index 0000000..d5f9ab2 --- /dev/null +++ b/cloud-server-other/src/main/java/com/dsh/other/util/RedisUtil.java @@ -0,0 +1,185 @@ +package com.dsh.other.util; + +import com.alibaba.csp.sentinel.util.StringUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import redis.clients.jedis.Jedis; +import redis.clients.jedis.JedisPool; +import redis.clients.jedis.Pipeline; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + + +/** + * Redis工具类 + */ +@Component +public class RedisUtil { + + @Autowired + private JedisPool jedisPool; + + private static final int TIMEOUT = 10 * 1000; // 10秒超时时间 + private static final int SLEEP_TIME = 1000; // 1秒休眠时间 + + /** + * 向redis中存储字符串没有过期时间 + * Storing strings in Redis without an expiration time. + * + * @param key + * @param value + */ + public void setStrValue(String key, String value) { + if (StringUtil.isNotEmpty(key)) { + Jedis resource = jedisPool.getResource(); + String set = resource.set(key, value); + closeJedis(resource); + } + } + + + /** + * 以分钟为单位设置存储值(设置过期时间) + * Set storage value in minutes (set expiration time) as units. + * + * @param key + * @param value + * @param time 秒 + */ + public void setStrValue(String key, String value, int time) { + if (StringUtil.isNotEmpty(key)) { + Jedis resource = jedisPool.getResource(); + String setex = resource.setex(key, time, value); + closeJedis(resource); + } + } + + + /** + * 从redis中获取值 + * + * @param key + * @return + */ + public String getValue(String key) { + if (StringUtil.isNotEmpty(key)) { + Jedis resource = jedisPool.getResource(); + String data = resource.get(key); + closeJedis(resource); + return data; + } + return null; + } + + + /** + * 批量获取 + * + * @param kes + * @return + */ + public List<Object> getValues(List<String> kes) { + if (null != kes) { + Jedis resource = jedisPool.getResource(); + Pipeline pipelined = resource.pipelined(); + for (String key : kes) { + pipelined.get(key); + } + List<Object> list = pipelined.syncAndReturnAll(); + + closeJedis(resource); + pipelined.clear(); + try { + pipelined.close(); + } catch (IOException e) { + e.printStackTrace(); + } + List<Object> data = new ArrayList<>(); + for (Object o : list) { + if (null != o) { + data.add(o); + } + } + return data; + } + return null; + } + + + /** + * 删除key + * + * @param key + */ + public void remove(String key) { + if (StringUtil.isNotEmpty(key)) { + Jedis resource = jedisPool.getResource(); + Long del = resource.del(key); + closeJedis(resource); + } + } + + + /** + * 删除资源 + * + * @param jedis + */ + public void closeJedis(Jedis jedis) { + if (null != jedis) { + jedis.close(); + } + } + + + public boolean acquireLock(String key, String value) { + Jedis jedis = null; + try { + jedis = jedisPool.getResource(); + long start = System.currentTimeMillis(); + String[] split = key.split(";"); + for (String s : split) { + + while (true) { + // 尝试获取锁 + String result = jedis.set(s, value, "NX", "PX", TIMEOUT); + if ("OK".equals(result)) { + return true; + } + // 超时则返回失败 + if (System.currentTimeMillis() - start > TIMEOUT) { + return false; + } + // 休眠一段时间后重试 + Thread.sleep(SLEEP_TIME); + } + } + + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (jedis != null) { + jedis.close(); + } + } + return false; + } + + public void releaseLock(String key) { + Jedis jedis = null; + try { + jedis = jedisPool.getResource(); + jedis.del(key); + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (jedis != null) { + jedis.close(); + } + } + } + + +} -- Gitblit v1.7.1