虽然缓存被认为是软件系统的性能助推器,但如果处理不当,它也容易出现错误。 在本文中,我将介绍 3 个有时可能会造成灾难性后果的常见缓存问题,希望大家在架构上引入缓存时,需要考虑到。
缓存故障 当缓存键过期时会发生缓存故障,并且多个请求同时访问数据库以查找相同的键。 让我们来看看它是如何工作的:
缓存击穿会显著增加数据库的负载,尤其是当许多热键同时过期时。 下面是解决这个问题的2种解决方案:
缓存穿透 当搜索到的key既不在缓存中, 也不在数据库中时,就会发生**缓存穿透,**连数据库都穿透过去了。 让我们来看看它是如何工作的,当key既不在缓存中也不在数据库中时,就会发生这种情况。
虽然乍一看这似乎微不足道,但攻击者可以通过使用此类密钥启动大量搜索来尝试破坏你的数据库。 为了解决这个问题,我们可以:
当对数据库的请求突然激增时,就会发生缓存雪崩。 这发生在:
数据库流量的突然激增可能会导致级联效应,并可能最终导致您的服务崩溃。 下面是一些常见的解决方案:
虽然这些缓存问题起初看起来微不足道,但有时可能会对我们的下游客户端和依赖项产生级联效应。事先了解它们可以让我们设计一个更强大的系统,也可以简化我们的故障排除过程。