From ef04ce57881e6a338b10d596c5eb76b2220598bf Mon Sep 17 00:00:00 2001 From: puzhibing <393733352@qq.com> Date: 星期四, 31 八月 2023 11:16:49 +0800 Subject: [PATCH] 更新版本 --- user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/RedisUtil.java | 283 ++++++++++++++++++++++++++++++++++++++++++------------- 1 files changed, 214 insertions(+), 69 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 index 7594824..2e7a476 100644 --- 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 @@ -1,16 +1,15 @@ package com.supersavedriving.user.modular.system.util; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; import com.supersavedriving.user.core.util.ToolUtil; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpEntity; -import org.springframework.http.HttpHeaders; -import org.springframework.http.MediaType; import org.springframework.stereotype.Component; -import org.springframework.util.LinkedMultiValueMap; -import org.springframework.util.MultiValueMap; -import org.springframework.web.client.RestTemplate; +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.*; /** @@ -20,7 +19,9 @@ public class RedisUtil { @Autowired - private RestTemplate internalRestTemplate; + private JedisPool jedisPool; + + private Timer timer; /** @@ -29,23 +30,11 @@ * @param value */ public void setStrValue(String key, String value){ - if(ToolUtil.isNotEmpty(key)){ - //发送验证码短信 - HttpHeaders headers = new HttpHeaders(); - // 以表单的方式提交 - headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); - //将请求头部和参数合成一个请求 - MultiValueMap<String, Object> params = new LinkedMultiValueMap<>(); - params.add("key", key); - params.add("value", value); - HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(params, headers); - String s = internalRestTemplate.postForObject("http://zuul-gateway/redis/setValue_", requestEntity, String.class); - JSONObject jsonObject = JSON.parseObject(s, JSONObject.class); - if(jsonObject.getIntValue("code") != 200){ - System.err.println("调用redis出错了"); - } + if(ToolUtil.isNotEmpty(key) && ToolUtil.isNotEmpty(value)){ + Jedis resource = jedisPool.getResource(); + String set = resource.set(key, value); + closeJedis(resource); } - } @@ -56,22 +45,10 @@ * @param time 秒 */ public void setStrValue(String key, String value, int time){ - if(ToolUtil.isNotEmpty(key)){ - //发送验证码短信 - HttpHeaders headers = new HttpHeaders(); - // 以表单的方式提交 - headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); - //将请求头部和参数合成一个请求 - MultiValueMap<String, String> params = new LinkedMultiValueMap<>(); - params.add("key", key); - params.add("value", value); - params.add("time", String.valueOf(time)); - HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(params, headers); - String s = internalRestTemplate.postForObject("http://zuul-gateway/redis/setValue", requestEntity, String.class); - JSONObject jsonObject = JSON.parseObject(s, JSONObject.class); - if(jsonObject.getIntValue("code") != 200){ - System.err.println("调用redis出错了"); - } + if(ToolUtil.isNotEmpty(key) && ToolUtil.isNotEmpty(value)){ + Jedis resource = jedisPool.getResource(); + String setex = resource.setex(key, time, value); + closeJedis(resource); } } @@ -83,45 +60,213 @@ */ public String getValue(String key){ if(ToolUtil.isNotEmpty(key)){ - HttpHeaders headers = new HttpHeaders(); - // 以表单的方式提交 - headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); - //将请求头部和参数合成一个请求 - MultiValueMap<String, Object> params = new LinkedMultiValueMap<>(); - params.add("key", key); - HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(params, headers); - String s = internalRestTemplate.postForObject("http://zuul-gateway/redis/getValue",requestEntity , String.class); - JSONObject jsonObject = JSON.parseObject(s, JSONObject.class); - if(jsonObject.getIntValue("code") != 200){ - System.err.println("调用redis出错了"); - } - return jsonObject.getString("data"); + 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 String remove(String key){ + public void remove(String key){ if(ToolUtil.isNotEmpty(key)){ - HttpHeaders headers = new HttpHeaders(); - // 以表单的方式提交 - headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); - //将请求头部和参数合成一个请求 - MultiValueMap<String, Object> params = new LinkedMultiValueMap<>(); - params.add("key", key); - HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(params, headers); - String s = internalRestTemplate.postForObject("http://zuul-gateway/redis/remove",requestEntity , String.class); - JSONObject jsonObject = JSON.parseObject(s, JSONObject.class); - if(jsonObject.getIntValue("code") != 200){ - System.err.println("调用redis出错了"); - } - return jsonObject.getString("data"); + Jedis resource = jedisPool.getResource(); + Long del = resource.del(key); + closeJedis(resource); } - return null; + } + + + /** + * 向集合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锁 + * @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"); } } -- Gitblit v1.7.1