From e180e151ee8369fcff917d878b3fb15b72d06d31 Mon Sep 17 00:00:00 2001 From: xuhy <3313886187@qq.com> Date: 星期一, 27 二月 2023 18:16:31 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/RedisUtil.java | 239 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 239 insertions(+), 0 deletions(-) diff --git a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/RedisUtil.java b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/RedisUtil.java new file mode 100644 index 0000000..218ef97 --- /dev/null +++ b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/RedisUtil.java @@ -0,0 +1,239 @@ +package com.supersavedriving.user.modular.system.util; + +import com.supersavedriving.user.core.util.ToolUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.util.StringUtils; +import redis.clients.jedis.Jedis; +import redis.clients.jedis.JedisPool; +import redis.clients.jedis.Pipeline; + +import java.io.IOException; +import java.util.*; + + +/** + * Redis工具类 + */ +@Component +public class RedisUtil { + + @Autowired + private JedisPool jedisPool; + + private Timer timer; + + + /** + * 向redis中存储字符串没有过期时间 + * @param key + * @param value + */ + public void setStrValue(String key, String value){ + if(ToolUtil.isNotEmpty(key) && ToolUtil.isNotEmpty(value)){ + Jedis resource = jedisPool.getResource(); + String set = resource.set(key, value); + closeJedis(resource); + } + } + + + /** + * 以分钟为单位设置存储值(设置过期时间) + * @param key + * @param value + * @param time 秒 + */ + public void setStrValue(String key, String value, int time){ + if(ToolUtil.isNotEmpty(key) && ToolUtil.isNotEmpty(value)){ + Jedis resource = jedisPool.getResource(); + String setex = resource.setex(key, time, value); + closeJedis(resource); + } + } + + + /** + * 从redis中获取值 + * @param key + * @return + */ + public String getValue(String key){ + if(ToolUtil.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(ToolUtil.isNotEmpty(key)){ + Jedis resource = jedisPool.getResource(); + Long del = resource.del(key); + closeJedis(resource); + } + } + + + /** + * 向集合key添加数据 + * @param key + * @param members + */ + public void addSetValue(String key, String...members){ + if(ToolUtil.isNotEmpty(key) && ToolUtil.isNotEmpty(members)){ + Jedis resource = jedisPool.getResource(); + Long sadd = resource.sadd(key, members); + resource.close(); + } + } + + + /** + * 返回Set集合数据 + * @param key + * @return + */ + public Set<String> getSetAllValue(String key){ + Set<String> smembers = new HashSet<>(); + if(ToolUtil.isNotEmpty(key)){ + Jedis resource = jedisPool.getResource(); + smembers = resource.smembers(key); + resource.close(); + } + return smembers; + } + + + /** + * 删除Set集合中的值 + * @param key + * @param members + */ + public void delSetValue(String key, String...members){ + if(ToolUtil.isNotEmpty(key) && ToolUtil.isNotEmpty(members)){ + Jedis resource = jedisPool.getResource(); + Long sadd = resource.srem(key, members); + resource.close(); + } + } + + + /** + * 删除资源 + * @param jedis + */ + public void closeJedis(Jedis jedis){ + if(null != jedis){ + jedis.close(); + } + } + + + /** + * redis加锁 + * @param key + * @param value + * @param time + * @return + */ + public boolean lock(String key, String value, int time){ + if(!StringUtils.isEmpty(key)){ + key += "_lock"; + Jedis resource = jedisPool.getResource(); + String set = resource.set(key, value, "nx", "ex", time); + if("OK".equals(set)){ + String finalKey = key; + timer = new Timer(); + timer.schedule(new TimerTask() { + @Override + public void run() { + System.err.println("定时任务启动"); + Jedis resource = jedisPool.getResource(); + resource.setex(finalKey, time, value); + resource.close(); + } + }, 1000, 500); + } + resource.close(); + return "OK".equals(set) ? true : false; + } + return false; + } + + /** + * 获取redis锁 + * @param time + * @return + */ + public boolean lock(int time){ + String uuid = UUID.randomUUID().toString(); + return lock("redis", uuid, time); + } + + + /** + * redis释放锁 + * @param key + * @return + */ + public boolean unlock(String key){ + if(!StringUtils.isEmpty(key)){ + key += "_lock"; + Jedis resource = jedisPool.getResource(); + timer.cancel();//取消定时任务 + Long del = resource.del(key); + resource.close(); + return del != 0 ? true : false; + } + return false; + } + + /** + * 删除锁 + * @return + */ + public boolean unlock(){ + return unlock("redis"); + } +} -- Gitblit v1.7.1