RedisManager创建redis资源池获取

package com.ml0115.service;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

public class RedisManager {
//合理的JedisPool资源池参数设置能为业务使用Redis保驾护航
private static JedisPool jedisPool;
//编辑Redis链接的代码
static {
JedisPoolConfig jedisPoolConfig=new JedisPoolConfig();
jedisPoolConfig.setMaxIdle(10);//资源池允许最大空闲的连接数
jedisPoolConfig.setMaxTotal(10);//资源池中最大连接数
jedisPool=new JedisPool(jedisPoolConfig,"127.0.0.1",6379);
}
public static Jedis getJedis() throws Exception{
if(null!=jedisPool) {
return jedisPool.getResource();
}
throw new Exception("JedisPool was not init");
}
}

Service的调用:

package com.ml0115.service;

import java.util.List;
import java.util.UUID;

import org.springframework.stereotype.Service;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.Transaction;

@Service
public class RedisService {
// 分布式锁
public String getLock(String key, int timeout) {
try {
Jedis jedis = RedisManager.getJedis();
String value = UUID.randomUUID().toString();// UUID
long end = System.currentTimeMillis() + timeout;
while (System.currentTimeMillis() < end) {
if (jedis.setnx(key, value) == 1) {
jedis.expire(key, timeout);
// 锁设置成功,redis操作成功
return value;
}
if (jedis.ttl(key) == -1) {// 监测过期时间
jedis.expire(key, timeout);
}
Thread.sleep(1000);
}

} catch (Exception e) {
e.printStackTrace();
}
return null;
}

// 释放锁
public boolean realeseLock(String key, String value) {
try {
Jedis jedis = RedisManager.getJedis();
while (true) {
jedis.watch(key);// watch
if (value.equals(jedis.get(key))) {
Transaction transaction = jedis.multi();
transaction.del(key);
List<Object> list = transaction.exec();
if (list == null) {
continue;
}
return true;
}
jedis.unwatch();
break;

}

} catch (Exception e) {
e.printStackTrace();
}
return false;
}

}