#yyds干货盘点#面试官问我:什么是讲透缓存击穿,该怎么解决?

这个问题来自于粉丝面试的时候遇到的,下面我来讲解一下。 什么是缓存击穿 对于这个问题,简单的说就是把缓存透了但数据库没透。还不明白?那么这一小节我来带大家通过一个形象的例子来讲解一下。 我们知道缓存层都会设置数据过期时间,如果不设置过期时间的话,随着查询的越来越多缓存就会越来越大,内存撑不住了服务器就炸了。但是我们设置了过期时间真的就万无一失了吗?假设数据已经到期了,那么缓存就查不到了,这时只能去数据库查。如果同一时间巨多的人发送的查询请求都是要求查这个数据。因为缓存过期了,所以这个巨多的查询都直接转向数据库去查询了,呵呵,我们的数据库大哥已经大半个身子埋土里了,这种情况叫缓存击穿。如果要查询的数据要跨表查询甚至跨库查询的话,面对这么大的查询请求,数据库大哥就直接见阎罗王了,这种情况叫数据缓存穿透。 如何解决 这很好办,我们可以从两个方向思考。目前我们可以使用的工具是数据库和缓存。 从数据库角度思考 我们可以直接把流量变成原来的一百分之一甚至是十分之一,这样数据库就能轻松可以处理查询请求了。 我们需要加锁,之前不管多少数据都可以同时读,但是现在来个锁,线程要读取数据时先查询数据有没有上锁,如果上锁了那就等着,如果没上锁那就获取锁后再请求数据库。这样数据库压力瞬间就降低了。但是这样做用户体验会很差,因为数据加锁了后面的请求都要等待,如果查询很慢的话用户可以明显感受到卡顿。但是没办法,因为这个方法的出发点就是牺牲用户体验,保证数据库不挂掉。 从缓存角度思考 我们来想想为啥什么出现缓存击穿的问题,是因为缓存数据过期了,没了。那么我们可以对缓存动刀解决这个问题。 修改缓存数据的过期策略,最常见的是设置热点数据永不过期。但是这个方法在很多情况下,我们无法预知哪些时热点数据。例如某明星官宣配偶前,微博的程序员们在初始化缓存的时候不可能直接把它归为热点数据。那该怎么办呢?当然还得从数据过期策略层面出发,我们可以做这样的逻辑:如果发现这个数据快过期了,并且最近这个数据访问特别多,那么后台就可以启动一个异步线程,重新在缓存层中添加这个数据的缓存,给这个数据续续命。

锦绣源码库是一家优秀的网站源码学习交流平台,为广大源码爱好者提供优质的小程序源码、APP源码、H5源码、商城源码教程以及公众号模块教程,大部分是会员免费,网站长期受到各站长的收藏及浏览。
用户必须遵守《计算机软件保护条例(2013修订)》第十七条:为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。鉴于此条例,用户从本平台下载的全部源码(软件)教程仅限学习研究,未经版权归属者授权不得商用,若因商用引起的版权纠纷,一切责任均由使用者自行承担,本平台所属公司及其雇员不承担任何法律责任。
锦绣源码库 » #yyds干货盘点#面试官问我:什么是讲透缓存击穿,该怎么解决?
赞助VIP 享更多特权,立即登录下载海量资源
喜欢我嘛?喜欢就按“ctrl+D”收藏我吧!♡