品牌好的佛山网站建设价格,做租赁哪个网站好,plc培训机构哪家最好,新建的网站怎么上首页一、Redis的缓存穿透 1.什么是缓存穿透#xff1f;
缓存穿透是指#xff1a;客户端请求的数据在缓存中和数据库中都不存在#xff0c;这时缓存就永远不会生效#xff0c;这些请求都打到数据库从而导致数据库压力过大。 2.出现缓存穿透的解决方案#xff0c;以下是常用的两…一、Redis的缓存穿透 1.什么是缓存穿透
缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在这时缓存就永远不会生效这些请求都打到数据库从而导致数据库压力过大。 2.出现缓存穿透的解决方案以下是常用的两种
1做缓存空对象
如果一个查询返回的数据为空不管是数据是否不存在我们仍然把这个空结果null进行缓存设置空结果的过期时间会很短最长不超过五分钟。
缓存空对象的优缺点
优点实现简单维护方便
缺点额外的内存消耗以及可能造成短期的数据不一致。如果在做了空缓存之后我们向数据库中插入了新的数据而插入的数据正好是之前做了空缓存的数据此时就会出现短期数据不一致的问题
2使用布隆过滤器
布隆过滤器Bloom Filter它实际上是一个很长的二进制向量位图和一系列的随机映射函数哈希函数它可以用于检索一个元素是否存在一个集合中他的优点是空间的查询效率和查询时间都远远超过一般算法缺点是有一定的误识别率和删除比较困难。
如下是加入布隆过滤器的一个实现流程
使用布隆过滤器的优缺点
优点内存占用少没有多余的key
缺点实现的过程比较复杂并且存在误判的可能 二、缓存击穿
1.什么是缓存击穿
** 缓存击穿也叫热点key问题就是一个被高并发访问并且缓存业务重构复杂的key突然失效了无数的请求会在瞬间给数据库带来巨大的冲击。**
当缓存的热点key过期后一个线程来请求数据查询缓存未命中然后从数据库中查询然后重新构建缓存数据需要一定的时间在缓存数据还没构建完成此时又有大量请求进来去查询数据缓存中未命中数据于是后面进来的请求也同步之前请求从数据库中查询数据并构建缓存的这一过程此时这些请求全部打到数据库中导致数据库压力变大。
大致如下图 2.出现缓存击穿的结局方案 即一个线程得到锁去更新数据的时候其他线程进来去查询数据的时候需要先去获取锁才能去查询数据库来更新缓存。此时因为已经有线程去更新缓存了故在多次查询后就可命中缓存中的数据。
2设置逻辑过期 对比以上两种方案优缺点如下
互斥锁
优点 没有额外的内存开销
保证了一致性
实现简单
缺点 线程需要等待
可能会有死锁的风险
逻辑过期
优点 线程无需等待性能较好
缺点 不保证一致性
有额外的内存消耗
实现比较复杂
三、缓存雪崩
1.什么是缓存雪崩
缓存雪崩是指在同一时间段大量的缓存key失效或者Redis宕机这时候大量的请求向数据库请求信息此时可能就会把数据库压垮。
过程大致如下 出现缓存雪崩的解决方案常用的有如下
1给不同的key的TTL设置随机值
2利用Redis集群提高服务的可用性
3) 给缓存业务添加限流降级的策略
4给业务添加多级缓存