黑马点评-用JMeter测试缓存重建时,HTTP请求的响应结果的data为空
问题描述
用JMeter测试缓存重建时,HTTP请求的响应结果的data为空
解决方案
1.未缓存预热(可能的问题1)
“逻辑过期”方案通常用于极高并发的热点 Key。为了防止查数据库拖垮系统,我们默认这些热点数据一定是事先手动存入 Redis 的
解决方法:
运行下面测试方法将"热点key"加入缓存,再进行测试
2.入口方法未改过来(可能的问题2)
有可能忘记把调用的方法切换到新写的 queryWithLogicalExpie 上了,切换到正确的方法重新运行即可
3.Hutool 工具类的“暗坑”(最可能的问题)
在 RedisData 类中,data 字段的类型声明的是泛型 Object。当 Hutool 把 Redis 里的 JSON 字符串反序列化成 RedisData 时,它不知道 data 具体是什么类,所以只能把它解析成一个通用的 JSONObject(本质上是个 Map)
接着,当试图直接把这个通用的 JSONObject 强转并映射给 Shop.class 时,Hutool 的底层反射在这个版本里会“迷失方向”,导致属性映射失败。它不会报错,而是默默地new 了一个 Shop 对象,但里面的所有属性都是 null!
解决方法:
先把这个 data 对象转回标准的 JSON 字符串,然后再通过字符串去反序列化成 Shop 对象。Hutool 处理“字符串转对象”是绝对不会出错的(用以下代码替代上面红框中的代码即可)
// 先把 data 转回 JSON 字符串,再反序列化为 Shop 对象 Shop shop = JSONUtil.toBean(JSONUtil.toJsonStr(redisData.getData()), Shop.class);