標籤:redis cluster jedis 擁塞 耗時間長度
redis cluster發布後我們項目中使用了cluster,使用驅動是jedis,但是在壓力測試過程中發現有一定數量的redis訪問非常緩慢高達幾十秒數分鐘,經過分析jedis驅動JedisClusterInfoCache中加鎖造成
private Map<String, JedisPool> nodes = new HashMap<String, JedisPool>();
private Map<Integer, JedisPool> slots = new HashMap<Integer, JedisPool>();
public JedisPool getNode(String nodeKey) {
r.lock();
try {
return nodes.get(nodeKey);
} finally {
r.unlock();
}
}
public JedisPool getSlotPool(int slot) {
r.lock();
try {
return slots.get(slot);
} finally {
r.unlock();
}
}
將map替換成ConcurrentHashMap
private Map<String, JedisPool> nodes = new ConcurrentHashMap<String, JedisPool>();
private Map<Integer, JedisPool> slots = new ConcurrentHashMap<Integer, JedisPool>();
去除鎖
public JedisPool getNode(String nodeKey) {
return nodes.get(nodeKey);
}
public JedisPool getSlotPool(int slot) {
return slots.get(slot);
}
測試後比較處理比較平穩,未出現某一個訪問耗時非常長得的情況。
本文出自 “天涯時空” 部落格,請務必保留此出處http://leshjmail.blog.51cto.com/629172/1784716
解決Redis cluster的jedis驅動在高並發下的擁塞問題