redis java切片_jedis 单点配置
pom引入jar包
redis.clients
jedis
2.9.0
spring 配置
type="int" />
redis.properties配置文件
redis.ip=127.0.0.1
redis.port=6379
redis.timeout=10000
#最大分配的對象數(shù)
redis.pool.maxActive=1024
#最大能夠保持idel狀態(tài)的對象數(shù)
redis.pool.maxIdle=50
#當(dāng)池內(nèi)沒有返回對象時,最大等待時間
redis.pool.maxWait=2000
#當(dāng)調(diào)用borrow Object方法時,是否進行有效性檢查
redis.pool.testOnBorrow=true
RedisUtil.java工具類
/**
*Class Description:
*
*/
package com.redis;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;
/**
* 連接和使用redis資源的工具類
*
* @author
*
*/
public class RedisUtil {
private static final Logger log = LoggerFactory.getLogger(RedisUtil.class);
private static int connCount = 0;// 當(dāng)前連接的個數(shù)
/**
* 切片客戶端鏈接池
*/
private ShardedJedisPool shardedJedisPool;
/**
* 獲取切片客戶端鏈接池
*
* @return conn
*/
public ShardedJedis getConnFromShardedPool() {
ShardedJedis shardedJedis = null;
try {
shardedJedis = shardedJedisPool.getResource();
} catch (Exception e) {
log.error("Get ShardedJedis from ShardedJedisPool failed...", e);
e.printStackTrace();
}
return shardedJedis;
}
/**
* @功能:獲取安全切片客戶端鏈接池
*
* @return conn
*/
public ShardedJedis getSafeConnFromShardedPool() {
// 獲取不到連接時等待一秒繼續(xù)嘗試,最多嘗試20次
int maxTryCount = 20;
ShardedJedis shardedJedis = null;
for (int i = 0; i < maxTryCount; i++) {
try {
shardedJedis = shardedJedisPool.getResource();
break;
} catch (Exception e) {
// 超過最多的嘗試次數(shù)則退出
if (i == maxTryCount) {
break;
}
log.error(
"==========>>Get ShardedJedis from ShardedJedisPool failed.,第"
+ (i + 1) + "次嘗試,最多嘗試" + maxTryCount
+ ",如超過最多的嘗試次數(shù)則退出執(zhí)行。", e);
e.printStackTrace();
try {
// 出現(xiàn)異常等待1秒鐘再次嘗試
Thread.sleep(1000);
} catch (Exception e2) {
log.error("", e);
}
}
}
if (shardedJedis != null) {
synchronized (this) {
connCount++;
log.info("Get ShardedJedis from ShardedJedisPool success.... 當(dāng)前使用連接數(shù)="
+ connCount);
}
}
return shardedJedis;
}
/**
* 關(guān)閉切片客戶端鏈接
*
* @param conn
*/
public void closeConnShardedJedis(ShardedJedis shardedJedis) {
if (null != shardedJedis) {
try {
shardedJedisPool.returnResource(shardedJedis);
} catch (Exception e) {
log.error("Close shardedJedis connection failed.");
e.printStackTrace();
}
}
synchronized (this) {
connCount--;
log.info("==========>>Close ShardedJedis from ShardedJedisPool success.... 當(dāng)前使用連接數(shù)="
+ connCount);
}
}
/**
* 設(shè)置數(shù)據(jù)
*
* @param conn
*/
public boolean setData(String key, String value) {
try {
ShardedJedis jedis = shardedJedisPool.getResource();
jedis.set(key, value);
shardedJedisPool.returnResource(jedis);
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
/**
* 獲取數(shù)據(jù)
*
* @param conn
*/
public String getData(String key) {
String value = null;
try {
ShardedJedis jedis = shardedJedisPool.getResource();
value = jedis.get(key);
shardedJedisPool.returnResource(jedis);
return value;
} catch (Exception e) {
e.printStackTrace();
}
return value;
}
/**
* 獲取切片客戶端鏈接池
*
* @return 數(shù)據(jù)源
*/
public ShardedJedisPool getShardedJedisPool() {
return shardedJedisPool;
}
/**
* 設(shè)置切片客戶端鏈接池
*
* @return 數(shù)據(jù)源
*/
public void setShardedJedisPool(ShardedJedisPool shardedJedisPool) {
this.shardedJedisPool = shardedJedisPool;
}
}
使用方法
@Autowired
private RedisUtil redisUtil;
public static void main(String[] args) {
ShardedJedis sj = null;
try {
sj = redisUtil.getSafeConnFromShardedPool();
sj.set("testkey","testvalue");
} catch (Exception e) {
e.printStackTrace();
} finally {
if (sj != null) {
redisUtil.closeConnShardedJedis(sj);
}
}
}
總結(jié)
以上是生活随笔為你收集整理的redis java切片_jedis 单点配置的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java教学目标_成为Java高手的25
- 下一篇: 上海欢乐谷九号线坐到哪里