系统缓存处理

玉皇大帝
• 阅读 1237

在使用缓存系统并且在系统存在高并发的情况下(可能要求强一致性),可能出现如下问题:

1. 缓存穿透
缓存穿透是指,查询的数据并不存在于缓存系统中导致必须查询DB的情况。
缓存穿透可能被利用作为系统攻击的点。例如:重复查询系统之不存在的key(不存在于缓存和DB)
解决思路:
如果查询的key不存在于缓存系统中那么,在缓存系统中增加此key,并且将值置为null(或其他的特殊值,此值代表缓存系统尚未收录),然后查询DB并更新至缓存系统。如果此key不存在于系统中,则将此key在缓存中置为特殊值(此特殊值表示系统不存在此值)
2.缓存并发
缓存高并发是指,在并发重复的大量请求缓存数据时,如果缓存系统不存在此key(可能时攻击也可能不是),那么将导致大量的重复请求首先引起缓存穿透问题,其次极大增加DB的压力,在此场景下缓存失去了应有作用。
缓存并发也可能被利用作为系统攻击点。除了上述的缓存穿透之外,也可能导致DB拒绝服务。例如:发送大量DB有但是缓存没有的数据(存在于DB不存在于缓存)
解决思路:
如果查询的是同一key,则加锁处理;如果查询时不同key则队列处理
3.缓存失效
缓存失效是指,给某些有时效性的缓存内容设定过期时间,到达过期时间之后,对应缓存失效了。简单拓展,缓存内容在没有被及时更新也是缓存失效,一般我们需要缓存的数据在我们修改DB的时候会同步修改缓存。
如果设定缓存失效时间都是一致的,那么会导致,在同一时间大量缓存失效,这时候如果有大量请求请求失效缓存则造成缓存穿透和缓存并发问题。
解决思路:
控制缓存失效时间,不让缓存在同一时间失效,失效时间对应不同的key设置随机时间失效,将请求分配到多个时间中减轻DB压力
4.缓存强一致性要求
缓存强一致性是指,缓存和DB是的操作时同步的。但是缓存和DB在实现强一致性时必然存在同步时间差。
解决思路:
首先我们需要保证我们的缓存系统时高可用的。在系统启动时将需要保证强一致性的数据载入缓存,所有操作和查询只修改缓存,缓存的数据可以异步的同步到DB。

点赞
收藏
评论区
推荐文章
3A网络 3A网络
3年前
缓存三大问题及解决方案
1.缓存来由随着互联网系统发展的逐步完善,提高系统的qps,目前的绝大部分系统都增加了缓存机制从而避免请求过多的直接与数据库操作从而造成系统瓶颈,极大的提升了用户体验和系统稳定性。2.缓存问题虽然使用缓存给系统带来了一定的质的提升,但同时也带来了一些需要注意的问题。2.1缓存穿透缓存穿透是指查询一个一定不存在的数据,因为缓存中也无该数据的信息,则会
Stella981 Stella981
3年前
Redis 击穿、穿透、雪崩的解决方案
Redis击穿、穿透、雪崩的解决方案击穿和穿透场景:指的是单个key在缓存中查不到,去数据库查询(透过redis去查db叫击穿)区别:击穿:数据在数据库中真实存在,缓存丢失,大量请求击穿数据库穿透:数据在缓存中没有,数据库中也没有
Stella981 Stella981
3年前
Guava的两种本地缓存策略
Guava的两种缓存策略缓存在很多场景下都需要使用,如果电商网站的商品类别的查询,订单查询,用户基本信息的查询等等,针对这种读多写少的业务,都可以考虑使用到缓存。在一般的缓存系统中,除了分布式缓存,还会有多级缓存,在提升一定性能的前提下,可以在一定程度上避免缓存击穿或缓存雪崩,也能降低分布式缓存的负载。Guav
Stella981 Stella981
3年前
Redis 缓存穿透、缓存雪崩的概念及其预防
缓存穿透【什么是缓存穿透】频繁查询不在缓存中的数据,给原本被缓存保护的系统过大压力。【为什么会发生缓存穿透】1\.程序没写好;2\.恶意攻击。【怎样防止缓存穿透】1\.在对key进行查询之前,先做初步判断,如果key一定不存在(例如,对某表的缓存,key一定由数字组成,那么包含非数字的key一定是不存在的
Stella981 Stella981
3年前
Redis之缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级
\TOC\Redis之缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级1、缓存雪崩  发生场景:当Redis服务器重启或者大量缓存在同一时期失效时,此时大量的流量会全部冲击到数据库上面,数据库有可能会因为承受不住而宕机  解决办法:    1)随机均匀设置失效
Stella981 Stella981
3年前
Linux玩转redis从入门到放肆
1\.缓存穿透在大多数互联网应用中,缓存的使用方式如下图所示:!(https://oscimg.oschina.net/oscnet/6a12e0fbee579fa624b2ea1738e89278c3f.png)1.当业务系统发起某一个查询请求时,首先判断缓存中是否有该数据;2.如果缓存中存在,则直接返回数据;3.如果缓存中
Stella981 Stella981
3年前
Redis缓存穿透问题及解决方案
上周在工作中遇到了一个问题场景,即查询商品的配件信息时(商品:配件为1:N的关系),如若商品并未配置配件信息,则查数据库为空,且不会加入缓存,这就会导致,下次在查询同样商品的配件时,由于缓存未命中,则仍旧会查底层数据库,所以缓存就一直未起到应有的作用,当并发流量大时,会很容易把DB打垮。缓存穿透问题缓存穿透是指查询一个根本不存在的数
【专项测试系列】-缓存击穿、穿透、雪崩专项测试
作者:刘须华一、背景概述: R2M缓存的使用,极大的提升了应用程序的性能和效率,特别是数据查询方面。而缓存最常见的问题是缓存穿透、击穿和雪崩,在高并发下这三种情况都会有大量请求落到数据库,导致数据库资源占满,引起数据库故障。平时
一招MAX降低10倍,现在它是我的了 | 京东云技术团队
性能优化是一场永无止境的旅程。到家门店系统,作为到家核心基础服务之一,门店C端接口有着调用量高,性能要求高的特点。C端服务经过演进,核心接口先查询本地缓存,如果本地缓存没有命中,再查询Redis。本地缓存命中率99%,服务性能比较平稳。
一招MAX降低10倍,现在它是我的了| 京东零售技术团队
一.背景性能优化是一场永无止境的旅程。到家门店系统,作为到家核心基础服务之一,门店C端接口有着调用量高,性能要求高的特点。C端服务经过演进,核心接口先查询本地缓存,如果本地缓存没有命中,再查询Redis。本地缓存命中率99%,服务性能比较平稳。随着门店数据
京东云开发者 京东云开发者
8个月前
真实案例解析缓存大热key的致命陷阱
作者:京东零售曹志飞引言在现代软件架构中,缓存是提高系统性能和响应速度的重要手段。然而,如果不正确地使用缓存,可能会导致严重的线上事故,尤其是缓存的大热key问题更是老生常谈。本文将探讨一个常见但容易被忽视的问题:缓存大热key和缓存击穿问题。我们将从一个
玉皇大帝
玉皇大帝
Lv1
他乡生白发,旧国见青山。
文章
3
粉丝
0
获赞
0