Commit 8dc866b2 by 胡青青

feat: [none] redis缓存命中率低,添加jedisCluster操作redis查询日志

parent e18ab00e
package com.pcloud.common.core.aspect;
import com.pcloud.common.utils.DateUtils;
import com.pcloud.common.utils.string.StringUtil;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
......@@ -10,7 +11,6 @@ import org.springframework.stereotype.Component;
import org.springframework.util.ResourceUtils;
import java.io.*;
import java.util.Date;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicInteger;
......@@ -24,18 +24,55 @@ import java.util.concurrent.atomic.LongAdder;
@Slf4j
public class JedisClusterAspect {
//需要统计的方法调用次数
private LongAdder allExistsLongAdder = new LongAdder();
private LongAdder allLpushLongAdder = new LongAdder();
private LongAdder allGetLongAdder = new LongAdder();
private LongAdder allRpopLongAdder = new LongAdder();
private LongAdder allHgetAllLongAdder = new LongAdder();
private LongAdder missExistsLongAdder = new LongAdder();
private LongAdder missGetLongAdder = new LongAdder();
private LongAdder missRpopLongAdder = new LongAdder();
private LongAdder missHgetAllLongAdder = new LongAdder();
private ConcurrentHashMap<String, AtomicInteger> missKeyMap = new ConcurrentHashMap<>();
private ConcurrentHashMap<String, AtomicInteger> tempMap = new ConcurrentHashMap<>();
private LongAdder getSetLongAdder = new LongAdder();
private LongAdder missGetSetLongAdder = new LongAdder();
private LongAdder getSetRLongAdder = new LongAdder();
private LongAdder missgetSetRLongAdder = new LongAdder();
private LongAdder setnxLongAdder = new LongAdder();
private LongAdder missSetnxLongAdder = new LongAdder();
private LongAdder hmgetLongAdder = new LongAdder();
private LongAdder misshmgetLongAdder = new LongAdder();
private LongAdder hgetLongAdder = new LongAdder();
private LongAdder misshgetLongAdder = new LongAdder();
private LongAdder hlenLongAdder = new LongAdder();
private LongAdder misshlenLongAdder = new LongAdder();
private LongAdder hkeysLongAdder = new LongAdder();
private LongAdder misshkeysLongAdder = new LongAdder();
private LongAdder lpopLongAdder = new LongAdder();
private LongAdder misslpopLongAdder = new LongAdder();
private LongAdder zcardLongAdder = new LongAdder();
private LongAdder misszcardLongAdder = new LongAdder();
private LongAdder zrevrangeLongAdder = new LongAdder();
private LongAdder misszrevrangeLongAdder = new LongAdder();
private LongAdder ttlLongAdder = new LongAdder();
private LongAdder misshttlLongAdder = new LongAdder();
private LongAdder zrankLongAdder = new LongAdder();
private LongAdder misszrankLongAdder = new LongAdder();
private LongAdder lrangeLongAdder = new LongAdder();
private LongAdder misslrangeLongAdder = new LongAdder();
private LongAdder llenLongAdder = new LongAdder();
private LongAdder missllenLongAdder = new LongAdder();
public JedisClusterAspect() {
new PringLogThread().start();
......@@ -57,20 +94,45 @@ public class JedisClusterAspect {
while (true) {
BufferedWriter out = null;
try {
Thread.sleep( 30 * 60 *1000);
Thread.sleep(60 * 60 * 1000);
tempMap.clear();
tempMap.putAll(missKeyMap);
missKeyMap.clear();
StringBuffer logStr = new StringBuffer("lpush调用:" + allLpushLongAdder.intValue() + "次");
logStr.append("\n");
logStr.append("exists调用:" + allExistsLongAdder.intValue() + "次,未命中:" + missExistsLongAdder.intValue() + "次");
logStr.append("\n");
StringBuffer logStr = new StringBuffer("\n");
logStr.append("get调用:" + allGetLongAdder.intValue() + "次,未命中:" + missGetLongAdder.intValue() + "次");
logStr.append("\n");
logStr.append("rpop调用:" + allRpopLongAdder.intValue() + "次,未命中:" + missRpopLongAdder.intValue() + "次");
logStr.append("\n");
logStr.append("hgetall调用:" + allHgetAllLongAdder.intValue() + "次,未命中:" + missHgetAllLongAdder.intValue() + "次");
logStr.append("\n");
logStr.append("getSet调用:" + getSetLongAdder.intValue() + "次,未命中:" + missGetSetLongAdder.intValue() + "次");
logStr.append("\n");
logStr.append("hget调用:" + hgetLongAdder.intValue() + "次,未命中:" + misshgetLongAdder.intValue() + "次");
logStr.append("\n");
logStr.append("hlen调用:" + hlenLongAdder.intValue() + "次,未命中:" + misshlenLongAdder.intValue() + "次");
logStr.append("\n");
logStr.append("lrange调用:" + lrangeLongAdder.intValue() + "次,未命中:" + misslrangeLongAdder.intValue() + "次");
logStr.append("\n");
logStr.append("llen调用:" + llenLongAdder.intValue() + "次,未命中:" + missllenLongAdder.intValue() + "次");
logStr.append("\n");
logStr.append("hkeys调用:" + hkeysLongAdder.intValue() + "次,未命中:" + misshkeysLongAdder.intValue() + "次");
logStr.append("\n");
logStr.append("lpop调用:" + lpopLongAdder.intValue() + "次,未命中:" + misslpopLongAdder.intValue() + "次");
logStr.append("\n");
logStr.append("zcard调用:" + zcardLongAdder.intValue() + "次,未命中:" + misszcardLongAdder.intValue() + "次");
logStr.append("\n");
logStr.append("zrevrange调用:" + zrevrangeLongAdder.intValue() + "次,未命中:" + misszrevrangeLongAdder.intValue() + "次");
logStr.append("\n");
logStr.append("ttl调用:" + ttlLongAdder.intValue() + "次,未命中:" + misshttlLongAdder.intValue() + "次");
logStr.append("\n");
logStr.append("zrank调用:" + zrankLongAdder.intValue() + "次,未命中:" + misszrankLongAdder.intValue() + "次");
logStr.append("getSetR调用:" + getSetRLongAdder.intValue() + "次,未命中:" + missgetSetRLongAdder.intValue() + "次");
logStr.append("\n");
logStr.append("setnx调用:" + setnxLongAdder.intValue() + "次,未命中:" + missSetnxLongAdder.intValue() + "次");
logStr.append("\n");
logStr.append("hmget调用:" + hmgetLongAdder.intValue() + "次,未命中:" + misshmgetLongAdder.intValue() + "次");
logStr.append("\n");
logStr.append("\n");
String fileName = "redisOperate" + DateUtils.getYmdHmsTime() + ".log";
out = new BufferedWriter(new FileWriter(path + fileName));
out.write(logStr.toString());
......@@ -97,40 +159,125 @@ public class JedisClusterAspect {
Object[] obj = joinPoint.getArgs();
String key = obj[0].toString();
switch (methodName) {
case "exists":
allExistsLongAdder.add(1);
if (result.toString().equals("false")) {
missExistsLongAdder.add(1);
addMissCount(missKeyMap, key);
}
break;
case "lpush":
allLpushLongAdder.add(1);
break;
case "get":
allGetLongAdder.add(1);
if (result == null) {
if (result == null || StringUtil.isEmpty(result.toString())) {
missGetLongAdder.add(1);
addMissCount(missKeyMap, key);
if (missKeyMap.get(key).intValue() > 5) {
log.warn("key: {}未命中 {}次", key, missKeyMap.get(key).intValue());
}
}
break;
case "rpop":
allRpopLongAdder.add(1);
if (result == null) {
if (result == null || StringUtil.isEmpty(result.toString())) {
missRpopLongAdder.add(1);
addMissCount(missKeyMap, key);
}
break;
case "hgetAll":
allHgetAllLongAdder.add(1);
if (result == null) {
if (result == null || StringUtil.isEmpty(result.toString())) {
missHgetAllLongAdder.add(1);
addMissCount(missKeyMap, key);
}
break;
case "getSet":
getSetLongAdder.add(1);
if (result == null || StringUtil.isEmpty(result.toString())) {
missGetSetLongAdder.add(1);
addMissCount(missKeyMap, key);
}
break;
case "getSetR":
getSetRLongAdder.add(1);
if (result == null || StringUtil.isEmpty(result.toString())) {
missgetSetRLongAdder.add(1);
addMissCount(missKeyMap, key);
}
break;
case "setnx":
setnxLongAdder.add(1);
if (result == null || StringUtil.isEmpty(result.toString())) {
missSetnxLongAdder.add(1);
addMissCount(missKeyMap, key);
}
break;
case "hmget":
hmgetLongAdder.add(1);
if (result == null || StringUtil.isEmpty(result.toString())) {
misshmgetLongAdder.add(1);
addMissCount(missKeyMap, key);
}
break;
case "hget":
hgetLongAdder.add(1);
if (result == null || StringUtil.isEmpty(result.toString())) {
misshgetLongAdder.add(1);
addMissCount(missKeyMap, key);
}
break;
case "hlen":
hlenLongAdder.add(1);
if (result == null || StringUtil.isEmpty(result.toString())) {
misshlenLongAdder.add(1);
addMissCount(missKeyMap, key);
}
break;
case "lrange":
lrangeLongAdder.add(1);
if (result == null || StringUtil.isEmpty(result.toString())) {
misslrangeLongAdder.add(1);
addMissCount(missKeyMap, key);
}
break;
case "llen":
llenLongAdder.add(1);
if (result == null || StringUtil.isEmpty(result.toString())) {
missllenLongAdder.add(1);
addMissCount(missKeyMap, key);
}
break;
case "hkeys":
hkeysLongAdder.add(1);
if (result == null || StringUtil.isEmpty(result.toString())) {
misshkeysLongAdder.add(1);
addMissCount(missKeyMap, key);
}
break;
case "lpop":
lpopLongAdder.add(1);
if (result == null || StringUtil.isEmpty(result.toString())) {
misslpopLongAdder.add(1);
addMissCount(missKeyMap, key);
}
break;
case "zcard":
zcardLongAdder.add(1);
if (result == null || StringUtil.isEmpty(result.toString())) {
misszcardLongAdder.add(1);
addMissCount(missKeyMap, key);
}
break;
case "zrevrange":
zrevrangeLongAdder.add(1);
if (result == null || StringUtil.isEmpty(result.toString())) {
misszrevrangeLongAdder.add(1);
addMissCount(missKeyMap, key);
}
break;
case "ttl":
ttlLongAdder.add(1);
if (result == null || StringUtil.isEmpty(result.toString())) {
misshttlLongAdder.add(1);
addMissCount(missKeyMap, key);
}
break;
case "zrank":
zrankLongAdder.add(1);
if (result == null || StringUtil.isEmpty(result.toString())) {
misszrankLongAdder.add(1);
addMissCount(missKeyMap, key);
}
break;
default:
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment