加入收藏 | 设为首页 | 会员中心 | 我要投稿 东莞站长网 (https://www.0769zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

程序员都不知道的缓存秘密,看完,秒懂缓存

发布时间:2019-07-13 07:13:27 所属栏目:MySql教程 来源:IT技术研习社
导读:副标题#e# 只要是干程序的都知道缓存是什么,甚至是跟IT相关行业各种人员都时不时冒出一句,系统慢可以加缓存呀,比如测试组的小姐姐,运营组的小妹妹,产品组的小哥哥。但缓存真的这么这么简单,人人都会用吗? 大家都知道的一点是,缓存可以让原本打开很慢

到这里做缓存就是在你自己的地盘了。很多时候我们会在源站前面架一层网关(或者说反向代理、正向代理),为的是做一些安全机制或者统一分流策略的入口。

程序员都不知道的缓存秘密,看完,秒懂缓存

同时这里也是做缓存的一个好场所。毕竟网关是"业务无关性"的,它能够拦下来的请求,对背后的源站也是很大的受益,减少了大量的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技术研习社,专注互联网技术研究与分享,喜欢的朋友可以点击【关注】;把经验传递给有梦想的人;

【编辑推荐】

  1. 2019年7月数据库流行度排行:Oracle王者归来获大幅增长
  2. 对比云端NoSQL数据库类型
  3. 浅谈数据库、JVM、缓存、SQL等性能调优方法和原则
  4. 几款优秀的分布式关系数据库
  5. MySQL数据库查询缓存总结
【责任编辑:庞桂玉 TEL:(010)68476606】
点赞 0

(编辑:东莞站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读