package com.stylefeng.guns.modular.system.util;
|
|
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSONObject;
|
import com.stylefeng.guns.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.util.StringUtils;
|
import org.springframework.web.client.RestTemplate;
|
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);
|
}
|
|
|
public boolean lock(String key, int time){
|
String uuid = UUID.randomUUID().toString();
|
return lock(key, 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");
|
}
|
}
|