服务端是Java 单机,Redis在远程服务器上,服务启动时往缓存里放入5000个字符串。
private final RedisUtil redisUtil;
private final HashMap<String, String> hashMap = new HashMap<>();
private final Cache<String, String> caffeineCache = Caffeine.newBuilder().expireAfterWrite(200000, TimeUnit.SECONDS)
.maximumSize(10000).build();
@PostConstruct
private void init() {
for (int i = 0; i < 5000; i++) {
String kv = "MISTRA" + i;
redisUtil.set(kv, kv);
hashMap.put(kv, kv);
caffeineCache.put(kv, kv);
}
redisUtil.set("MISTRA", "mistra#");
hashMap.put("MISTRA", "mistra#");
caffeineCache.put("MISTRA", "mistra#");
}
@PostMapping("/test-redis")
public String test() {
return redisUtil.get("MISTRA");
}
@PostMapping("/test-hashMap")
public String testMap() {
return hashMap.get("MISTRA");
}
@PostMapping("/test-caffeine")
public String testCaffeine() {
return caffeineCache.getIfPresent("MISTRA");
}
JMeter线程组设置:1秒内启动1100个线程,每个线程循环请求500次
Caffeine QPS:30012
HashMap QPS:30545
Redis QPS:1359
因为Redis要花去网络开销,所以Java单机QPS受限