zoukankan      html  css  js  c++  java
  • 缓存穿透、缓存击穿、缓存雪崩

    常用的缓存处理流程:

    客户端发起请求,服务器端从缓存获取,获取到则返回,如果没有则从数据库获取,然后存放到缓存,最后返回结果,如果依旧没有则返回空。

    缓存穿透:

    缓存和数据库中均没有数据,但是客户端不断发起请求,会导致这些请求直接打到数据库上,导致数据压力增高。

    可以设置空置,如果数据库获取不到的缓存,存储key-null,超期时间设置60s或者根据业务设定其他时间。

    如果某些业务场景,有些key是永远不会存在的,是恶意访问。可以使用bitmap记录key是否存在,例如使用布隆过滤器。

    缓存击穿:

    由于缓存到期被清理,用户并发较多的时候,导致这个时间的请求打到数据库,引起数据库短时间压力增大。

    热点数据永不过期。

    使用分布式锁,redis使用setIfAbsent,如果获取到锁,从数据库获取,然后刷新缓存,返回值,没有获取到锁,等待100ms,重新从redis获取值,没有值就获取锁,最多重试3次,依旧没有获取成功则返回空。

    缓存雪崩:

    缓存中大批量数据到期,由于查询量巨大,导致这些查询短时间打到了数据库上,使得数据库压力过大。

    缓存数据的过期时间随机分布,尽量避免同时大量数据失效。

    热点数据设置永久有效。

  • 相关阅读:
    js动态生成表格
    My97DatePicker显示时间控件的使用方法
    理解Action,Service和Dao功能(转)
    Myeclipseforspring 10破解
    MySQL常用命令(参考资料,部分改动)
    Struts2---Result(传统Web应用程序与Ajax应用程序的异同)
    正则表达式笔记
    day5.字符串内置函数
    day5.数据类型简介
    day4.变量+程序交互
  • 原文地址:https://www.cnblogs.com/avalon-merlin/p/9268072.html
Copyright © 2011-2022 走看看