美文网首页
缓存三大问题点你都了解?

缓存三大问题点你都了解?

作者: DoubleFooker | 来源:发表于2020-02-18 14:28 被阅读0次

    缓存的意义

    1:缓存一般都在内存中操作,性能比数据库高。
    2:缓存资源的消耗相比数据库资源的消耗更低。
    基于提高应用性能的目的,使用缓存提升了数据处理的性能,降低数据存储的消耗,提高了数据访问的响应时间。

    缓存雪崩

    • 问题点:

    当大量的缓存key设置的过期时间都是同一个时间点,那么当到达这个时间点时,大量的缓存key失效,导致请求全部落地到数据库,造成数据库瞬间并发请求提高,带来雪崩问题。

    • 解决方案:

    1:过期时间添加随机值,将相同过期时间点概率降低。(弊端:缓存失效时间不能准确的管理)
    2:缓存不设置过期时间,通过更新操作更新缓存。(弊端:更新失败,缓存一致性问题)

    缓存穿透

    • 问题点:

    请求的key,在缓存及db中都不存在,数据库查询不存在,不进行缓存设置,导致每次请求都落地到数据库。如果是恶意的请求,将造成数据库压力过大。例如:业务id是数据库自增的,使用id为-1的请求参,那么每次都会查询数据库,而且数据不存在。

    • 解决方案:

    1:将不存在的key也缓存,设置value为特定业务值及合适的过期时间。那么请求过来时,换查询缓存,并且在过期时间内不会落地数据库。(弊端:当数据库出现新的id,且之前缓存已经被设置为控制,那么过期时间内无法访问新增的数据)
    2:布隆过滤器,将所有可能存在的id存储在一个bitmap,请求前先经过过滤器判断是否存在。(弊端:存在误判的可能)

    缓存击穿

    • 问题点:

    对于某个热点key,每秒并发很高,在key失效的时间点,瞬间并发请求同时查询数据库,导致数据库压力瞬时暴涨。如果这样的key很多,而且当存在跟缓存雪崩一样问题的情况,数据库无疑压力更大。

    • 解决方案:

    1:热点key不设置过期时间,通过更新操作同步。(弊端:更新失败带来的一致性问题)
    2:通过锁机制,只允许一个请求查库同,时可以考虑使用缓存降级,获得锁失败的进程查询降级的缓存。(弊端:互斥锁带来的性能问题,导致其他线程在等待)


    相关文章

      网友评论

          本文标题:缓存三大问题点你都了解?

          本文链接:https://www.haomeiwen.com/subject/bekgfhtx.html