package cn.duoceshi.springbootdemo.utils;
import org.springframework.stereotype.Component;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class RedisUtils {
private static JedisPool jedisPool;
static {
Map<String, String> props = PropertyUtils.getAll(RedisUtils.class.getResourceAsStream("/application.properties"));
String ip = props.get("redis.host");
int port = Integer.parseInt(props.get("redis.port"));
int timeout = 60000;
String password = props.get("redis.password");
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxActive(10);
config.setMaxIdle(5);
config.setMaxWait(5000);
config.setTestOnBorrow(true);
config.setTestOnReturn(true);
config.setTestWhileIdle(true);
config.setMinEvictableIdleTimeMillis(60000L);
config.setTimeBetweenEvictionRunsMillis(3000L);
config.setNumTestsPerEvictionRun(-1);
jedisPool = new JedisPool(config, ip, port, timeout, password);
}
public static void close(Jedis jedis) {
try {
jedisPool.returnResource(jedis);
} catch (Exception e) {
if (jedis.isConnected()) {
jedis.quit();
jedis.disconnect();
}
}
}
public static String get(String key) {
String value = null;
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
value = jedis.get(key);
} finally {
//返还到连接池
close(jedis);
}
return value;
}
public static void set(String key, String value) {
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
jedis.set(key, value);
} finally {
//返还到连接池
close(jedis);
}
}
public static Set<String> keys(String keyFormat) {
Jedis jedis = null;
Set<String> set = new HashSet<>();
try {
jedis = jedisPool.getResource();
set = jedis.keys(keyFormat);
} finally {
//返还到连接池
close(jedis);
}
return set;
}
public static void hset(String key, String field, String value) {
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
jedis.hset(key, field, value);
} finally {
//返还到连接池
close(jedis);
}
}
/**
* 获取数据
*
* @param key
* @return
*/
public static String hget(String key, String field) {
String value = null;
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
value = jedis.hget(key, field);
} finally {
//返还到连接池
close(jedis);
}
return value;
}
/**
* 发布消息
*
* @param channel
* @param message
*/
public static void publish(String channel, String message) {
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
jedis.publish(channel, message);
} finally {
//返还到连接池
close(jedis);
}
}
/**
* 向名为key的list尾部添加一个值为value的元素
*
* @param key
* @param value
*/
public static void rpush(String key, String value) {
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
jedis.rpush(key, value);
} finally {
//返还到连接池
close(jedis);
}
}
/**
* 向名为key的list尾部添加一个值为value的元素
* @param key
* @param valueList
*/
public static void rpush(String key,List<String> valueList){
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
String[] valueArray = new String[valueList.size()];
valueList.toArray(valueArray);
jedis.rpush(key, valueArray);
} catch (Exception e) {
//释放redis对象
jedisPool.returnBrokenResource(jedis);
e.printStackTrace();
} finally {
//返还到连接池
close(jedis);
}
}
public static String lindex(String key, Integer index) {
Jedis jedis = null;
String value = null;
try {
jedis = jedisPool.getResource();
value = jedis.lindex(key, index);
} finally {
//返还到连接池
close(jedis);
}
return value;
}
public static void hmset(Object key, Map<String, String> hash) {
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
jedis.hmset(key.toString(), hash);
} finally {
//返还到连接池
close(jedis);
}
}
public static void hmset(Object key, Map<String, String> hash, int time) {
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
jedis.hmset(key.toString(), hash);
jedis.expire(key.toString(), time);
} finally {
//返还到连接池
close(jedis);
}
}
public static List<String> hmget(Object key, String... fields) {
List<String> result = null;
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
result = jedis.hmget(key.toString(), fields);
} finally {
//返还到连接池
close(jedis);
}
return result;
}
public static Set<String> hkeys(String key) {
Set<String> result = null;
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
result = jedis.hkeys(key);
} finally {
//返还到连接池
close(jedis);
}
return result;
}
public static List<String> lrange(String key, int from, int to) {
List<String> result = null;
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
result = jedis.lrange(key, from, to);
} finally {
//返还到连接池
close(jedis);
}
return result;
}
public static Map<String, String> hgetAll(String key) {
Map<String, String> result = null;
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
result = jedis.hgetAll(key);
} finally {
//返还到连接池
close(jedis);
}
return result;
}
public static void del(String key) {
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
jedis.del(key);
} finally {
//返还到连接池
close(jedis);
}
}
public static long llen(String key) {
long len = 0;
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
len = jedis.llen(key);
} finally {
//返还到连接池
close(jedis);
}
return len;
}
public static void main(String[] args) {
System.out.println(RedisUtils.get("name"));
}
}