做网站优化加速的时候,配置缓存是最常用的方法,但是很多朋友配置完缓存,去后台一看缓存命中率特别低,有的甚至不到百分之二十,缓存等于白配置,根本起不到分担源站压力、加速访问的作用。其实缓存命中率低不是缓存没用,大多是配置不对或者策略不合理,调整之后就能大幅提升命中率,今天我们一步步讲清楚怎么调整。

缓存的作用就是把经常访问的内容提前存在高速位置,用户访问的时候直接返回缓存内容,不用再去源站读取生成。缓存命中率就是,用户发起一百次访问,有多少次能直接命中拿到缓存,命中率越高,说明缓存的利用率越高,加速效果越好。命中率低就说明大部分请求还是要回源站处理,缓存根本没发挥作用,所以提升命中率是缓存配置的核心目标,很多新手只关心开没开缓存,不关心命中率,自然得不到理想的加速效果。
很多新手为了让内容更新及时,把缓存过期时间设置得特别短,比如几十分钟甚至几分钟,导致缓存刚生成就过期了,下一次访问就要重新生成,命中率自然上不去。当然也不是过期时间越长越好,太长会导致用户看不到更新的内容,要根据网站内容更新频率调整:比如内容基本不更新的静态站点,过期时间可以设置到几天甚至一周;经常更新的博客资讯站,可以设置为几个小时到一天;实时性要求很高的站点,再考虑缩短到几十分钟。另外还要检查有没有开启不合理的自动刷新,频繁清空缓存也会拉低命中率。
很多服务器或者CDN的缓存都有容量限制,如果你的缓存容量设置得太小,存不下多少热门内容,新缓存生成的时候就会把旧的热门缓存挤出去,导致用户访问热门内容的时候也要回源,命中率自然低。如果你用的是CDN缓存,可以检查CDN的缓存配额,够不够你站点的热门内容大小,不够的话升级扩容。如果是服务器本地缓存,比如Nginx的proxy_cache,要检查设置的max_size参数,是不是太小了,调整到能容纳下大部分热门内容的大小就可以。不要舍不得给缓存留空间,缓存空间足够才能留住热门内容提升命中率。
很多站点运行时间久了,会生成大量没人访问的过期缓存,这些缓存占着空间,把热门缓存挤出去,也会拉低整体命中率。要定期清理过期的无用缓存,比如可以设置自动清理机制,超过过期时间的缓存自动删掉,腾出空间给热门内容。另外还要检查缓存键的设置规则,有没有因为规则太细导致同一个内容生成多个不同的缓存键,比如很多新手会把url带的每个参数都当作缓存键的一部分,导致同一个页面因为参数不同生成很多份缓存,不仅占空间还降低命中率,对于不需要参数区分内容的站点,可以去掉多余参数统一缓存,就能提升命中率。
很多新手一开缓存就把所有内容都缓存,其实很多内容是没人访问的冷内容,冷内容占着缓存空间,导致热门内容放不下,命中率自然低。合理的做法是分层缓存,只缓存访问量高的热门内容,对于很少有人访问的冷内容不缓存或者设置短过期,这样有限的缓存空间就能全部留给热门内容,命中率自然就上去了。比如可以统计访问日志,把超过一定访问量的内容标记为热门,只缓存这些内容,或者按照内容类型缓存,比如只缓存静态资源图片、js、css,动态内容不缓存,也能有效提升整体命中率。
缓存穿透就是用户频繁访问一些不存在的内容,这些内容不会生成缓存,每一次访问都要回源,导致整体命中率被拉低。比如很多恶意爬虫会扫描站点,不断访问不存在的随机url,这些请求都会穿透缓存,直接拉低命中率。遇到这种情况,可以把不存在的url也缓存起来,返回404结果,或者在防火墙层面拦截恶意爬虫的请求,减少穿透缓存的无效请求,命中率自然就上来了。另外对于频繁访问的不存在的参数,也可以做规则拦截,不让这些请求穿透缓存消耗资源。
很多缓存是用户第一次访问的时候才生成,第一个用户访问的时候肯定不命中,要是站点更新比较频繁,每次更新之后所有缓存都要重新生成,也会拉低整体命中率。解决方法就是做缓存预热,更新内容之后,主动把热门内容的缓存提前生成好,不用等用户访问的时候再生成,这样用户访问的时候就能直接命中,自然提升了命中率。比如你更新了首页和热门文章,可以用简单的脚本主动请求这些页面,生成缓存,这样一来用户访问的时候直接就能命中,整体命中率就上去了。
缓存命中率低其实不是什么复杂问题,大多是基础配置不合理导致的,按照上面的步骤一步步排查调整,从过期策略、缓存大小、规则设置这些基础点入手,大部分情况都能把命中率提升到百分之八十以上,充分发挥缓存的加速作用,给用户更好的访问体验,也能减轻源站的压力,降低服务器资源消耗。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!