作为站长一直喜欢折腾, 力求完美。
之前基于宝塔面板用Nginx缓存 + Memcached缓存来优化网站,已经可以让网站起飞了。
可以参看之前的文章:同一服务器多站点设置nginx fastcgi_cache缓存。
BT(宝塔面板)-WordPress开启Nginx fastcgi_cache缓存加速。
后来听说有Redis缓存,但是一直没有去尝试。在用memcached缓存的时候对于自定义页面的缓存更新存在问题,请教了其他站长,也确实有这个问题,所以停用了Memcached缓存。
关于Memcached缓存与Redis缓存的对比,可以参看文章:缓存方式Redis与Memcached区别。
听大鸟博客说Redis不存在这个问题,所以才有想法尝试下Redis缓存。在尝试之前要先理清原理,通过了解后才有了下面这张图
其实我更愿意用到踏雪无痕博客上的这张图,如下图
多级缓存架构的工作流程
每次请求过来,优先从nginx本地缓存中提取各种数据,结合页面模板,生成需要的页面;
如果nginx本地缓存过期了,那么就从nginx到redis中去拉取数据,同时将最新的内容更新到nginx本地;
如果redis中也被LRU算法清理掉了,就重新发送请求数据库拉取数据,然后再次redis缓存,并返回数据给nginx,并且nginx将数据缓存到本地
多级缓存架构中每一层的意义
nginx本地缓存,主要是针对热数据的高并发访问,拿商城商品信息来说:
商品的购买总是有热点的,类似于爆款商品、热卖商品。比如每天购买iphone、小米等知名品牌的东西的人总是比较多的,这些热数据由于经常被访问,所以可以被锁定在nginx的本地缓存内,那么对这些热数据的大量访问,就直接走nginx就可以了,不需要走后续的各种网络开销了。
redis缓存,(主要是针对大规模的离散访问)它提供海量的数据支撑、高并发的访问、高可用的服务,由于redis缓存最大量的数据,最完整的数据,因此为后面数据库提供了一层强有力的保护伞。
nginx本地内存有限,也就能缓存部分的热数据,除了各种爆款商品信息热数据,其他相对不那么热的数据,流量会经常走到redis那里。
将Redis当做内存数据库使用,提高读写效率。最终的目的就是尽量减少对数据库的操作,帮助解决因为数据库操作产生的服务器压力,造成的客户端延迟现象。