一,将查询结果放到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();}
第一次测试: