企业网站优化怎么做,韩国跨境电商有哪些平台,鞍山seo公司,中国互联网中心官网#x1f389;#x1f389;欢迎光临#xff0c;终于等到你啦#x1f389;#x1f389;
#x1f3c5;我是苏泽#xff0c;一位对技术充满热情的探索者和分享者。#x1f680;#x1f680;
#x1f31f;持续更新的专栏Redis实战与进阶
本专栏讲解Redis从原理到实践
…
欢迎光临终于等到你啦
我是苏泽一位对技术充满热情的探索者和分享者。
持续更新的专栏Redis实战与进阶
本专栏讲解Redis从原理到实践
这是苏泽的个人主页可以看到我其他的内容哦
努力的苏泽http://suzee.blog.csdn.net/ 缓存如何实现面试必考题 请看 我的讲解以及最佳实践吧
目录
缓存如何实现面试必考题 请看 我的讲解以及最佳实践吧
关于 Redis 缓存的解释如下
实现思路图
商户缓存跟着视频做的然后我按照同样的方法逻辑 把商店类型的缓存自己做了一遍
首先注册一个IShopTypeService服务的对象typeService 然后直接调用typeService的方法queryTypeList() 下一节我们来讲解 Redis缓存击穿 缓存雪崩等缓存更新会发生的问题 都是Redis的面试必考题 关于 Redis 缓存的解释如下
Redis 如何实现缓存 在后端接收到请求后对于需要进行缓存的接口首先会在 Redis 中查找是否有对应的数据。如果缓存中不存在数据系统会继续按照正常的业务流程处理请求并将查询到的结果返回给客户端的同时也存储在 Redis 中。下次相同的请求到达时系统可以直接从 Redis 中获取数据而无需访问数据库。
在启用缓存后相同的请求在缓存有效期内不会再去读取数据库。但是如果在此期间修改了数据库中的数据接口返回的数据就无法保证与数据库一致。因此在进行增、删、改操作时需要刷新缓存。
Redis 缓存更新策略是什么 缓存更新可以采用不同的策略以下是两种常见情况的比较
第一种情况是先更新数据库然后同步更新缓存或者先更新缓存然后同步更新数据库。这两种方式都属于写穿透write through策略。同步更新的好处是可以保持数据的一致性但缺点是同步更新会对性能产生影响。
第二种情况是先更新缓存然后异步写回数据库也被称为写回write back策略。异步写回的优点是不会影响缓存的高性能能够快速响应客户端请求。但缺点是在数据异步写回数据库之前缓存与数据库的数据可能短暂不一致。 实现思路图 商户缓存跟着视频做的然后我按照同样的方法逻辑 把商店类型的缓存自己做了一遍
以下是步骤
首先注册一个IShopTypeService服务的对象typeService 然后直接调用typeService的方法queryTypeList()
RestController
RequestMapping(/shop-type)
public class ShopTypeController {Resourceprivate IShopTypeService typeService;GetMapping(list)public Result queryTypeList() {
// ListShopType typeList typeService.query().orderByAsc(sort).list();return typeService.queryTypeList();}
}
在IShopTypeService接口中我们定义这个抽象方法 然后在IShopTypeService的实现类IShopTypeServiceImp中实现这个方法
public interface IShopTypeService extends IServiceShopType {Result queryTypeList();
}
Service
public class ShopTypeServiceImpl extends ServiceImplShopTypeMapper, ShopType implements IShopTypeService {Resourceprivate StringRedisTemplate stringRedisTemplate;Resource//引入mybatis的接口 用于查数据库private IShopTypeService shopTypeService;Overridepublic Result queryTypeList() {//1.从redis中查询有无String shopTypeJson stringRedisTemplate.opsForValue().get(shopType);//2.判断是否存在if (StrUtil.isNotBlank(shopTypeJson)){//3.存在直接返回 JSONUtil.parseArray将JSON 数组字符串转换为 Java 对象列表ListShopType shopType BeanUtil.copyToList(JSONUtil.parseArray(shopTypeJson), ShopType.class);
// System.err.println(shopType);return Result.ok(shopType);}//不存在 查询数据库ListShopType shopTypeList shopTypeService.query().orderByAsc(sort).list();//数据库不存在 返回报错if (shopTypeList null) {return Result.fail(查询失败);}//数据库存在 写入redis 返回//将list转换成json 要用toJsonStr不能toStringString str JSONUtil.toJsonStr(shopTypeList);stringRedisTemplate.opsForValue().set(shopType,str);
// System.err.println(str);return Result.ok(shopTypeList);}
}
首先从 Redis 中查询数据是否存在。如果数据存在将 JSON 数组字符串转换为 ListShopType 对象并直接返回结果。如果数据不存在于 Redis 中则从数据库查询商店类型列表。如果数据库查询失败返回查询失败的错误信息。如果数据库查询成功将查询结果转换为 JSON 字符串并存储到 Redis 中。最后返回查询结果。 下一节我们来讲解 Redis缓存击穿 缓存雪崩等缓存更新会发生的问题 都是Redis的面试必考题