New file |
| | |
| | | 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(); |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | } |