黑马点评 店铺类型查询业务添加缓存
代码思路:如果缓存有,则直接返回,如果缓存不存在,则查询数据库,然后存入redis,返回即可。
方法一:使用redis的String
类型
@Override
public Result queryTypeList() {
// 1.从redis中查询店铺类型的缓存
String shopTypeJson = stringRedisTemplate.opsForValue().get(CACHE_SHOP_KEY);
// 2.判断是否命中
if (StrUtil.isNotBlank(shopTypeJson)){
// 命中则直接返回 --> 将json转为字符串
List<ShopType> shopTypes = JSONUtil.toList(shopTypeJson, ShopType.class);
return Result.ok(shopTypes);
}
// 3.未命中 ———》查询数据库
List<ShopType> shopTypes = query().orderByAsc("sort").list();
// 4.判断店铺类型是否存在
if (shopTypes == null){
return Result.fail("店铺类型不存在");
}
// 5.店铺类型存在,将店铺类型信息写入redis中
stringRedisTemplate.opsForValue().set(CACHE_SHOP_KEY,JSONUtil.toJsonStr(shopTypes));
return Result.ok(shopTypes);
}
方法二:使用redis的List
类型
@Override
public Result queryShopList() {
// 1. 从redis中查询商铺类型列表
List<String> shopTypes = stringRedisTemplate.opsForList().range(CACHE_SHOP_TYPE_KEY, 0, 9);
// 2. 命中,返回商铺类型信息
List<ShopType> shopTypesByRedis = new ArrayList<>();
if (shopTypes.size() != 0) {
for (String shopType : shopTypes) {
ShopType type = JSONUtil.toBean(shopType, ShopType.class);
shopTypesByRedis.add(type);
}
return Result.ok(shopTypesByRedis);
}
// 3. 未命中,从数据库中查询商铺类型,并根据sort排序
List<ShopType> shopTypesByMysql = query().orderByAsc("sort").list();
// 4. 将商铺类型存入到redis中
for (ShopType shopType : shopTypesByMysql) {
String s = JSONUtil.toJsonStr(shopType);
stringRedisTemplate.opsForList().rightPushAll(CACHE_SHOP_TYPE_KEY,s);
}
// 5. 返回商铺类型信息
return Result.ok(shopTypesByMysql);
}