数据库优化-缓存穿透

缓存穿透是指客户端请求的数据在缓存和数据库中都不存在,这样缓存永远不会生效,这些请求都会打到数据库。常见的解决方案有两种。

1、缓存空对象

例如用户携带id请求后端,但这个id是不存在于数据库和缓存中的。后端就给这一个id做出特定的回应策略,返回一个null,同时将这个id对应为null存在缓存中。这样利用同一个id攻击数据库的方法就会不起作用。
优点:实现简单,方便维护
缺点:
1. 额外的内存消耗(携带的id一直为随机生成的id,那么就需要给这些id都一一对应一个null,这是我们就需要给这些回应为null的缓存设置一个有效时间,过期即作废)
2. 可能造成短期的不一致(同前面,假设被我们设置回应为null的id,正巧被设置为一个数据的id值,那么在这个null有效期过之前,数据库和缓存短期不一致)

2、布隆过滤

在客户端和redis之间加一层,访问redis时先访问到布隆过滤器,布隆过滤器知道有还是没有这个数据,没有直接拒绝访问。有则进行下一层。
优点:内存占用少,没有多余的key
缺点:实现复杂(布隆过滤为一种算法),存在误判可能。

猜你喜欢

转载自blog.csdn.net/weilaaer/article/details/128400915