缓存的几个概念

news/2024/7/4 8:18:14

为什么80%的码农都做不了架构师?>>>   hot3.png

缓存穿透

缓存穿透是说收到了一个请求,但是该请求缓存里没有,只能去数据库里查询,然后放进缓存。

这里面有两个风险,一个是同时有好多请求访问同一个数据,然后业务系统把这些请求全发到了数据库;第二个是有人恶意构造一个逻辑上不存在的数据,然后大量发送这个请求,这样每次请求都会被发送到数据库,可能导致数据挂掉。

怎么应对这种情况呢?对于恶意访问,一个思路是事先做校验,对恶意数据直接过滤掉,不要发到数据库层;第二个思路是缓存空结果,就是对查询不存在的数据仍然记录一条该数据不存在在缓存里,这样能有效的减少查询数据库的次数。

那么非恶意访问呢?这个要结合缓存击穿来讲。

缓存击穿

上面提到的某个数据没有,然后好多请求都被发到数据库其实可以归为缓存击穿的范畴:对于热点数据,当数据失效的一瞬间,所有请求都被下放到数据库去请求更新缓存,数据库被压垮。

怎么防范这种问题呢?一个思路是全局锁,就是所有访问某个数据的请求都共享一个锁,获得锁的那个才有资格去访问数据库,其他线程必须等待。但是现在的业务都是分布式的,本地锁没法控制其他服务器也等待,所以要用到全局锁,比如用redis的setnx实现全局锁。

另一个思路是对即将过期的数据主动刷新,做法可以有很多,比如起一个线程轮询数据,比如把所有数据划分为不同的缓存区间,定期分区间刷新数据等等。这第二个思路又和我们接下来要讲的缓存雪崩有关系。

缓存雪崩

缓存雪崩是指比如我们给所有的数据设置了同样的过期时间,然后在某一个历史性时刻,整个缓存的数据全部过期了,然后瞬间所有的请求都被打到了数据库,数据库就崩了。

解决思路要么是分治,划分更小的缓存区间,按区间过期;要么是给每个key的过期时间加个随机值,避免同时过期,达到错峰刷新缓存的目的。

缓存刷新(另一个程序专门刷新缓存)

说到刷新缓存,其实也有坑的。比如我之前的一份工作里,有一次大活动,正是如火如荼的时候,所有的广告位突然都变空白了。后来追查原因,所有的广告素材都在缓存里,然后起了个程序,专门负责刷新缓存,每次把当前的素材全量刷新。

坏就坏在这个全量上。因为大活动的时候流量极大,广告更新压力也很大,把负责提供更新素材的程序压崩了。刷新缓存的程序在请求时,收到了一个返回结果Null。接下来就喜闻乐见了,刷新程序根据这个null,清空了整个缓存,所有广告素材都失效了。

转载于:https://my.oschina.net/suyain/blog/1845750


http://www.niftyadmin.cn/n/4608358.html

相关文章

JavaScript 启动性能探究

本文讲的是JavaScript 启动性能探究,作为 web 开发者,都知道 web 项目开发到最后,页面规模很容易变的很大。 但 加载 一个网页远不止从网线上传送字节码那么简单。浏览器下载了页面脚本之后,它还必须解析、解释和运行它们。这篇文…

五分钟读懂TCP 协议——TCP协议简介

TCP 是互联网核心协议之一,本文介绍它的基础知识。一、TCP 协议的作用互联网由一整套协议构成。TCP 只是其中的一层,有着自己的分工。(图片说明:TCP 是以太网协议和 IP 协议的上层协议,也是应用层协议的下层协议。&…

nodejs作为前后端分离中间件的跨域解决方案

前后端分离时候SEO问题很头疼,上次提供了nuxtaxios解决服务端渲染问题的解决方案,其实nodejs一样可以做服务端渲染,这时候会产生ajax跨域问题,本文旨在nodejs中跨域问题 其实很简单,像其他的服务端程序一样&#xff0c…

win10会无缘故自动关机,解决办法如下

win10会无缘故自动关机,解决办法如下 1、在此电脑右键中找到设备管理器 2、找到系统设备,定位到intel大R 3、点击右键,属性,把勾勾去掉,确定即可 结果就是win10再也不会随便关机了,更不会在休眠时候关机。…

Ajax文件上传并添加Bootstrap进度条

&#xff11;、项目中需要用到文件上传和显示进度&#xff0c;网上各种插件搞得头晕&#xff0c;决定自己实现一个 三个步骤&#xff1a;Ajax上传文件&#xff0c;获取上传进度&#xff0c;显示进度 html: <!DOCTYPE HTML> <html> <head><meta charset&qu…

让电脑性能加强--开启电池的卓越模式

默认是没有卓越模式的&#xff0c;要先在菜单中– 然后Windows PowerShell窗口中输入powercfg -duplicatescheme e9a42b02-d5df-448d-aa00-03f14749eb61

Java方法使用的有点总结

方法使用的优点&#xff1a; 1-将解决问题的方法与主函数代码分开&#xff0c;逻辑更清晰&#xff0c;代码可读性更强。 2-若方法出错&#xff0c;则程序可以缩小为只在该方法中查找错误&#xff0c;使代码更容易调试。 3-方法是解决一类问题的抽象&#xff0c;一旦写成功就可以…

来自期末作业多科联考的思考

这里写自定义目录标题liunx服务器安装百度SEO优化网站运营管理liunx服务器安装 可选择各大厂商的云服务器&#xff0c;也可选购物平台的商家选购性价比高的可自行选择安装纯净系统&#xff0c;也可在平台选择别人配置好了的系统宝塔面板选配&#xff0c;安全狗选配&#xff0c…