课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
缓存是程序员在学习计算机软件开发需要重点掌握的一个编程知识,而今天我们就通过案例分析来了解一下,计算机缓存常见问题都有哪些。
1、缓存穿透
指访问不存在的数据,从而绕过缓存,直接请求到了数据源,当请求过多,就会对DB造成压力。
空key:指对于不存在的数据也将key存空值入缓存系统,这样下次访问也会得到返回。但只适用于空数据key有限、key重复请求概率高,如果量大且不重复,就会造成很多无用key的创建。
布隆过滤器:布隆过滤器是一个很长的二进制向量和一系列随机映射函数。可用于检索一个元素是否在一个集合中加一层对空值的过滤器,空间和时间效率都很高。但由于hash产生的碰撞可能存在误判,以及因不存储key导致的无法删除。适用于空数据key各不同、重复请求概率低。
2、缓存击穿
缓存击穿实际是缓存雪崩的一个特例。指当某些热点key过期时,就会有大量的请求击穿到DB。
互斥锁:在缓存失效的时候,不立即loaddb,可以先用如SETNX等命令去set一个mutexkey,当操作返回成功时,说明拿到锁,此刻该线程进行loaddb的操作并更新缓存;否则未拿到锁就(可休眠一段)重试get缓存的方法。但要注意死锁风险。
这里的不过期有两个概念,一个指未设过期时间,那是真的不过期,那没事了。
另一个是指通过业务逻辑,将key的过期时间进行存储,请求是判断是否小于值,是则后台异步更新。
3、缓存雪崩
同一时刻大量缓存失效(故障),请求到了DB。
随机时间:在设置过期时间时,可以在基础时间上+一个随机的时间,等于实现了分批过期。
后台更新:将更新失效的工作交给后台定时线程。
限流+本地缓存:如ehcache本地缓存+Hystrix限流。
双缓存:类似于设置主从缓存,从key不过期。
4、缓存更新与一致性
如果保证数据一致性。列出四种更新策略:
CacheAside:常用的。失效时回源取数据,更新;命中时,返回缓存数据;更新时先数据源更新,再更新缓存。
WriteBack:更新数据时,只更新缓存,不更新数据源。缓存异步批量更新数据库。
WriteThrough:当有数据更新时,如未命中缓存,直接更新数据库,并返回。如命中缓存,则更新缓存,再由Cache自己更新数据库。
ReadThrough:更新数据源由缓存系统操作,读取数据时如缓存失效,则取回源数据更新缓存。
5、热点数据
对于热点数据的处理方法。
拆分复杂结构:如二级数据结构,进行拆分,这样热点key就被拆为若干个的key分布到不同节点。
迁移热点:对于RedisCluster而言可以将热点key所在的slot单独迁移到一个节点,降低其他节点压力。
多副本:复制多份缓存副本,将请求分散到多个节点上,减轻单台缓存服务器压力,适合多读少写。
6、缓存预热
指可以将某些的缓存数据提前加载到缓存系统,提前避免在如热点数据大量请求到库。
7、缓存降级
指当访问量剧增、服务出现问题或非核心服务影响到核心流程的性能时,仍需保证主服务可用。可根据一些关键数据自动降级,也可配置开关人工降级。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请在707945861群中学习了解。