博主看了黑马点评的“P37 实战篇-商户查询缓存-03.缓存练习题分析”作业,做了将近一天之后把四种类型的实现方法都实现了一遍,目前标榜是全网最全的作业解答,有更牛的大佬欢迎指正/挑战! 谢谢。
一、String型:
// (1)↓~-用String类型,opsForValue缓存的
String key = "Cache:TypeList:String";
//@ZYL:先查找缓存
String shopTypeJson = stringRedisTemplate.opsForValue().get(key);
//@ZYL:缓存找到了就直接返回
if (StrUtil.isNotBlank(shopTypeJson)) {
List<ShopType> shopTypeList = JSONUtil.toList(shopTypeJson, ShopType.class);
return shopTypeList;
}
//@ZYL:缓存找不到(隐含逻辑:if判断失败了,此处相当于else部分 ),再找数据库
List<ShopType> shopTypeList = query().orderByAsc("sort").list();
stringRedisTemplate.opsForValue().set(key,JSONUtil.toJsonStr(shopTypeList));
return shopTypeList;
二、List型:
// (2)↓~-用List类型,opsForList缓存的
String key = "Cache:TypeList:List";
//@ZYL:先查找缓存
String shopTypeString = stringRedisTemplate.opsForList().leftPop(key);
//@ZYL:缓存找到了就直接返回
if (StrUtil.isNotBlank(shopTypeString)) {
return JSONUtil.toList(shopTypeString,ShopType.class);
//@ZYL: ↑万*-JSONUtil.toList !★
}
//@ZYL:缓存找不到(隐含逻辑:if判断失败了,此处相当于else部分 ),再找数据库
List<ShopType> shopTypeList = query().orderByAsc("sort").list();
stringRedisTemplate.opsForList().leftPush(key, JSONUtil.toJsonStr(shopTypeList));
//@ZYL: ↑万*-JSONUtil.toJsonStr !★
return shopTypeList;
三、ZSet(SortedSet)型:
// (3)↓~-用ZSet类型,opsForzset缓存的
String key = "Cache:TypeList:ZSet";
//@ZYL:先查找缓存
String shopTypeString = stringRedisTemplate.opsForZSet().randomMember(key);
//@ZYL:缓存找到了就直接返回
if (StrUtil.isNotBlank(shopTypeString)) {
return JSONUtil.toList(shopTypeString,ShopType.class);
//@ZYL: ↑万*-JSONUtil.toList !★
}
//@ZYL:缓存找不到(隐含逻辑:if判断失败了,此处相当于else部分 ),再找数据库
List<ShopType> shopTypeList = query().orderByAsc("sort").list();
stringRedisTemplate.opsForZSet().add(key, JSONUtil.toJsonStr(shopTypeList),0);
//@ZYL: ↑万*-JSONUtil.toJsonStr !★
return shopTypeList;
四、Hash型:
// (4)↓~-用hash类型,opsForHash缓存的 //@ZYL:Hash的用Map转String的方法-试了一下,最终没成功,用String类型(JSON字符串)接收
// Map类型,最终也不知道怎么把String类型再转为Map类型了(上网搜了几个方法API试了一下,没试成功);而这里的为用Object类型接收的
String key = "Cache:TypeList:Hash",hashKey="hashKey";
//@ZYL:先查找缓存
Object shopTypeObject = stringRedisTemplate.opsForHash().get(key,hashKey);
if(shopTypeObject!=null) {
String shopTypeString = shopTypeObject.toString();
//@ZYL:缓存找到了就直接返回
if (StrUtil.isNotBlank(shopTypeString)) {
return JSONUtil.toList(shopTypeString, ShopType.class);
//@ZYL: ↑万*-JSONUtil.toList !★
}
}
//@ZYL:缓存找不到(隐含逻辑:if判断失败了,此处相当于else部分 ),再找数据库
List<ShopType> shopTypeList = query().orderByAsc("sort").list();
stringRedisTemplate.opsForHash().put(key,hashKey,JSONUtil.toJsonStr(shopTypeList));
//@ZYL: ↑万*-JSONUtil.toJsonStr !★
return shopTypeList;