package com.agentdriving.user.modular.system.util; import com.agentdriving.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 getValues(List kes){ if(null != kes){ Jedis resource = jedisPool.getResource(); Pipeline pipelined = resource.pipelined(); for(String key : kes){ pipelined.get(key); } List list = pipelined.syncAndReturnAll(); closeJedis(resource); pipelined.clear(); try { pipelined.close(); } catch (IOException e) { e.printStackTrace(); } List 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 getSetAllValue(String key){ Set 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锁 * @return */ public boolean lock(){ try { boolean b = lock(5); if(!b){ int num1 = 1; while (num1 <= 10){ try { Thread.sleep(3000);//等待3秒 } catch (InterruptedException e) { e.printStackTrace(); } b = lock(5); if(b){ return true; }else{ num1++; } } return false; } return b; }catch (Exception e){ e.printStackTrace(); unlock(); } 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"); } }