在大量请求下,直接访问数据库超过数据库承载能力会使得数据库因为资源消耗耗尽而无法使用。所以为了防止这种情况发生我们需要给数据库增加一个保护,有缓存也有缓冲。
缓存是为了多次读取,缓冲是为了防止IO处理不过来顺序写入。
那么多大是数据库的承载能力呢?假如你是校验用户名密码,或者精确查询这种,我认为一般的数据库每秒3万以下都可以承受,这对数据库来说天空飘来五个字“那都不是事”。
以一个MySQL为例,其他的数据库也差不多。这是一个同行朋友在他们系统的压测数据。是优化前和优化后的。我们就看select就行,每秒16万的请求。我刚才说每秒3w说少了。不过机器配置不同嘛,我说的是最差的情况。其实就这个最差的情况一般企业足够了。如果不够,可以找我探讨。
图片
我们加缓存目的有这么几个:(可能不全面)
1、避免数据库解析
2、读内存比读磁盘快
第一点几乎没人考虑过,第二点是大家基本这样认为的。比如Redis memcache都是内存数据库。用来当缓存。
但是毕竟Redis memcache这些 历史远比数据库晚,那么没有这些技术之前,日子怎么过的?不活了吗?不是的。答案就是数据库自己有缓存。
中学时候有证明题,那么我们来证明一下。
图片

可以看到查1100万数据历时6.42秒。再查一次,0.2毫秒。也就是说这个东西被缓存了。即使没有redis。(当然这个数据发生变化了,再查还是要花好几秒了,要重新缓存。这也就是为什么MySQL8取消了这个)
Oracle 证明如下,从英文字面上就可以看到物理读是0.全是内存读。

大家都是内存,不存在黄浦区的房子比宝山区的贵。内存的世界都一样。这里要提一下,即使修改了。Oracle也能缓存。不服不行。
也就是说。即使没有缓存数据库自己也可以做到。
那为什么要缓存啊?那是因为的确有些公司请求超过了每秒100万 1000万或者上亿。那是真的需要缓存啊。
美英法记者招待会实况:半岛记者问:你们为什么要攻打叙利亚?
美英法代表答:我们怀疑叙利亚有大规模杀伤性武器。
半岛记者记者问:那当年你们怀疑伊拉克有大规模杀伤性武器,后来你们杀掉萨达姆时,也没有看到大规模杀伤性武器?
美英法答:我们怀疑他们有大规模杀伤性武器。
半岛记者问:那你们为什么不攻打中国?美英法答:中国真有大规模杀伤性武器啊。




