一,将查询结果放到redis中作为缓存,减轻mysql的压力。
只有在数据量大的时候,查询速度慢的时候才有意义。
本次测试的数据量为XXX.
测试代码: 功能为根据昵称进行模糊匹配。
@GetMapping("/get-by-nick")
public String getNickName(String nickName){
LambdaQueryWrapper<UserPO> wrapper = new LambdaQueryWrapper<UserPO>()
.like(UserPO::getNickName,nickName)
.or()
.like(UserPO::getUserName,nickName);
List<UserPO> userPOS = userMapper.selectList(wrapper);
if (userPOS.isEmpty()){
return "暂无此人";
}
return userPOS.toString();
}
可以看到大约是耗时10秒左右,这样的性能对用户是不能接受的。
想到加入redis缓存,修改代码,如果redis中没有那么将查询结果存放到redis中。
@GetMapping("/get-by-nick")
public String getNickName(String nickName){
String key =buildKey(nickName);
if(Boolean.TRUE.equals(redisTemplate.hasKey(key))){
return redisTemplate.boundValueOps(key).get();
}
LambdaQueryWrapper<UserPO> wrapper = new LambdaQueryWrapper<UserPO>()
.like(UserPO::getNickName,nickName)
.or()
.like(UserPO::getUserName,nickName);
List<UserPO> userPOS = userMapper.selectList(wrapper);
if (userPOS.isEmpty()){
redisTemplate.boundValueOps(key).set("暂无此人");
return "暂无此人";
}
redisTemplate.boundValueOps(key).set(userPOS.toString());
return userPOS.toString();
}
第一次测试: