🎉🎉欢迎光临,终于等到你啦🎉🎉
🏅我是苏泽,一位对技术充满热情的探索者和分享者。🚀🚀
🌟持续更新的专栏Redis实战与进阶
本专栏讲解Redis从原理到实践
这是苏泽的个人主页可以看到我其他的内容哦👇👇
努力的苏泽
缓存如何实现?面试必考题 请看 我的讲解以及最佳实践吧
关于 Redis 缓存的解释如下:
实现思路图
商户缓存跟着视频做的,然后我按照同样的方法逻辑 把商店类型的缓存自己做了一遍
首先注册一个IShopTypeService服务的对象typeService 然后直接调用typeService的方法queryTypeList()
下一节我们来讲解 Redis缓存击穿 缓存雪崩等缓存更新会发生的问题 都是Redis的面试必考题
在启用缓存后,相同的请求在缓存有效期内不会再去读取数据库。但是,如果在此期间修改了数据库中的数据,接口返回的数据就无法保证与数据库一致。因此,在进行增、删、改操作时,需要刷新缓存。
第一种情况是先更新数据库,然后同步更新缓存,或者先更新缓存,然后同步更新数据库。这两种方式都属于写穿透(write through)策略。同步更新的好处是可以保持数据的一致性,但缺点是同步更新会对性能产生影响。
第二种情况是先更新缓存,然后异步写回数据库,也被称为写回(write back)策略。异步写回的优点是不会影响缓存的高性能,能够快速响应客户端请求。但缺点是在数据异步写回数据库之前,缓存与数据库的数据可能短暂不一致。
以下是步骤
@RestController
@RequestMapping("/shop-type")
public class ShopTypeController {
@Resource
private IShopTypeService typeService;
@GetMapping("list")
public Result queryTypeList() {
// List<ShopType> typeList = typeService.query().orderByAsc("sort").list();
return typeService.queryTypeList();
}
}
在IShopTypeService接口中我们定义这个抽象方法 然后在IShopTypeService的实现类IShopTypeServiceImp中实现这个方法
public interface IShopTypeService extends IService<ShopType> {
Result queryTypeList();
}
@Service
public class ShopTypeServiceImpl extends ServiceImpl<ShopTypeMapper, ShopType> implements IShopTypeService {
@Resource
private StringRedisTemplate stringRedisTemplate;
@Resource//引入mybatis的接口 用于查数据库
private IShopTypeService shopTypeService;
@Override
public Result queryTypeList() {
//1.从redis中查询有无
String shopTypeJson = stringRedisTemplate.opsForValue().get("shopType");
//2.判断是否存在
if (StrUtil.isNotBlank(shopTypeJson)){
//3.存在直接返回 JSONUtil.parseArray将JSON 数组字符串转换为 Java 对象列表
List<ShopType> shopType= BeanUtil.copyToList(JSONUtil.parseArray(shopTypeJson), ShopType.class);
// System.err.println(shopType);
return Result.ok(shopType);
}
//不存在 查询数据库
List<ShopType> shopTypeList = shopTypeService.query().orderByAsc("sort").list();
//数据库不存在 返回报错
if (shopTypeList ==null) {
return Result.fail("查询失败");
}
//数据库存在 写入redis 返回
//将list转换成json 要用toJsonStr不能toString
String str = JSONUtil.toJsonStr(shopTypeList);
stringRedisTemplate.opsForValue().set("shopType",str);
// System.err.println(str);
return Result.ok(shopTypeList);
}
}
List<ShopType>
对象,并直接返回结果。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuoyibo.net 版权所有 湘ICP备2023021910号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务