redis缓存穿透问题

缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会打到数据库

常见的解决办法:

缓存空对象:第一次请求发现redis和数据库中都不存在时,,可以设置请求数据为key,null为值,放置在缓存中.

但是会有一个问题,就是如果此类请求过多,会导致内存压力过大,解决办法:设置五分钟的过期时间,但是当我们后续对这个key赋值时,会导致短期的数据不一致问题.

优点:实现简单,维护方便.

缺点:额外的内存消耗,可能会导致数据短期的不一致问题

布隆过滤器:是在redis之前进行的操作,也就是说,请求发过来时,不先查看缓存,而是先查看布隆过滤器,如果布隆过滤器没有,直接拒绝,如果认为存在,才放行,但是数据不一定真的在redis或者数据库中存在

原理:是将数据库中的数据基于某一种哈希算法计算出他的哈希值,然后将哈希值转换为二进制位,将其存入到布隆过滤其中,让其做判断,只会拒绝一定不存在的数据

优点:内存占用较少,没有多余的key

缺点:实现复杂,存在误判的可能.

其他解决办法:

增强参数的复杂度,避免被猜测id规律;

做好数据的基础格式校验

加强用户权限校验,比如设置必须登录之后才能访问等等

做好热点参数的限流

猜你喜欢

转载自blog.csdn.net/wfdfg/article/details/133324618