微信第三方网站开发教程,今天安阳最新消息,网页设计入门与应用电子书pdf百度网盘,做电影网站解决版权问题所有问题解决的关键就是尽少的访问数据库#xff0c;或者避免太集中的访问。 一#xff0c;缓存穿透#xff08;key在数据库不存在#xff09; 当数据既不在缓存中#xff0c;也不在数据库中#xff0c;导致请求访问缓存没数据#xff0c;访问数据库也没数据#xff0c… 所有问题解决的关键就是尽少的访问数据库或者避免太集中的访问。 一缓存穿透key在数据库不存在 当数据既不在缓存中也不在数据库中导致请求访问缓存没数据访问数据库也没数据即 每次都一穿到底。 当有大量这样的请求到来时数据库的压力骤增。
解决 对请求过滤参数检查、黑名单、白名单等直接拒绝。 缓存空值对查询不存在的数据也缓存下来值为null并设置较短过期时间。 使用布隆过滤器快速判断数据是否存在避免通过查询数据库来判断使用bitmaps实现在写入数据库数据时使用布隆过滤器做个标记然后在用户请求发现缓存没有值时查询布隆过滤器快速判断数据是否存在。 二缓存击穿热点key过期 对于热点数据当缓存失效的一瞬间所有的请求都被下放到数据库去请求更新缓存数据库被压垮。 解决 访问数据库加分布式锁获得锁的那个线程才能去访问数据库并写回缓存其他线程等待。 热点数据不过期由后台异步更新缓存或者在热点数据即将过期前提前通知后台线程更新缓存以及重新设置过期时间。 三缓存雪崩大量key同时过期 当大量缓存在同一时间过期如果此时有大量的用户请求瞬间所有的请求都被下放到数据库数据库就崩掉了。 解决 将缓存失效时间随机打散 在原有的失效时间基础上增加一个随机值比如1到10分钟这样每个缓存的过期时间都不重复了也就降低了缓存集体失效的概率。 缓存设置为不过期 通过后台服务来更新缓存数据。