黑马程序员Redis入门到实战教程,深度透析redis底层原理+redis分布式

P37作业:基于value为String实现的(业务逻辑都放在了Service中),仅供参考
@Service
public class ShopTypeServiceImpl extends ServiceImpl<ShopTypeMapper, ShopType> implements IShopTypeService {
@Resource
private StringRedisTemplate stringRedisTemplate;
@Override
public Result queryShopType() {
// 1.从redis查询商铺
String key = "cache:shop_type";
String shopTypeJson = stringRedisTemplate.opsForValue().get(key);
// 2.判断是否存在
if (StrUtil.isNotBlank(shopTypeJson)) {
// 3.缓存 命中
List<ShopType> typeList = JSONUtil.toList(shopTypeJson, ShopType.class);
return Result.ok(typeList);
}
// 4.缓存 未命中 根据id查询数据库
List<ShopType> typeList = query().orderByAsc("sort").list();
// 5.判断商铺是否存在
if (typeList == null) {
// 6.不存在,给出错误信息
return Result.fail("店铺类型不存在!");
}
// 7.存在,将商铺信息数据写入缓存
stringRedisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(typeList));
stringRedisTemplate.expire(key, LOGIN_USER_TTL, TimeUnit.MINUTES);
// 8.返回商铺信息
return Result.ok(typeList);
}
}