程序员都不知道的缓存秘密,看完,秒懂缓存
到这里做缓存就是在你自己的地盘了。很多时候我们会在源站前面架一层网关(或者说反向代理、正向代理),为的是做一些安全机制或者统一分流策略的入口。 同时这里也是做缓存的一个好场所。毕竟网关是"业务无关性"的,它能够拦下来的请求,对背后的源站也是很大的受益,减少了大量的CPU运算。 常用的网关(代理)缓存有Varnish,Squid,Ngnix。一般情况下,简单的缓存运用场景,用nginx即可,因为大部分时候我们会用它来做负载均衡,能少引入一个技术就少一份复杂度嘛。如果是大量的小文件可以使用Varnish,而Squid则相对大而全,运用成本也更高一些。 进程内缓存 一个请求能走到这里说明他是"业务相关"的,需要经过业务逻辑的运算。 也正因为如此,从这里开始对缓存的引入成本比前面3种大大增加,因为对缓存与数据库之间的 数据一致性 要求更高了。 可能我们大多数程序员第一次刻意使用缓存的场景就是这个时候,进程内和进程外的缓存运用中有很多的细节需要注意,这些后续文章再详聊。 进程外缓存 这个大家也熟悉,就是redis、memcached之类,甚至也可以自己单独写一个程序来专门存放缓存数据,供其他程序远程调用。 同样,这里的细节我们后续再聊,这里先多说几句关于redis和memcached该怎么选择的建议。 对资源(cpu、内存等)利用率格外重视的话可以使用Memcached,但程序在使用的时候需要容忍可能发生的数据丢失,因为是纯内存的机制。如果无法容忍这点,并且对资源利用率也比较豪放的话可以使用redis。而且redis的数据库结构更多,Memcached只有key value,更像是一个nosql存储。 数据库缓存 数据库本身自带缓存模块的,否则也不会叫它内存杀手,基本上你给多少内存就能吃多少。 数据库缓存是数据库的内部机制,我们这里就不深入下去了。一般都会给出设置缓存空间大小的配置来让你进行干预。 最后,其实磁盘本身也有缓存。所以你会发现,为了让数据能够平稳的写到物理磁盘中真的是一波三折,不知道什么时候可以有"快"到不需要程序来考虑缓存的磁盘出现来拯救我们程序员呢。 缓存 是Silver bullet吗? 可能你会想缓存那么好,那么应该多多益善,只要慢就上缓存来解决? 一个事物看上去再好,也有它负面的一面。缓存也有一系列的副作用需要考虑。除了上面提到的 缓存更新 和 缓存与数据的一致性 问题,还有诸如: 1、缓存雪崩 2、缓存穿透 3、缓存并发 4、缓存无底洞 5、缓存淘汰 6、... 等等问题,这些Z哥会在接下去的文章中和你一起深入剖析。 总结 好了,我们总结一下。这次呢,IT技术研习社向你介绍了运用缓存的三种思路。 然后梳理了在一个完整的系统中可以设立缓存的几个位置,并且分享了关于浏览器缓存、CDN缓存、网关(代理)缓存的一些使用经验。 希望对你有所启发。 IT技术研习社,专注互联网技术研究与分享,喜欢的朋友可以点击【关注】;把经验传递给有梦想的人; 【编辑推荐】
点赞 0 (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |