为什么 MySQL 有缓存,还要使用 Redis?

238 天前
 yodhcn
这是上次面试中,虽然面试官问我的问题,当时给我问迷糊了。
Q:为什么 MySQL 有缓存,还要使用 Redis ?
A:MySQL 以前有缓存,但由于命中率不高,在新版本中已经舍弃掉了。
Q:那 Oracle 数据库呢? Oracle 数据库有缓存吗?
A:不清楚。
Q:不论是 MySQL 还是 Oracle ,只要是数据库就应该都有缓存,那为什么数据库有缓存,还要使用 Redis ?
A: Redis 支持分片集群,缓存容量容易扩展;而 MySQL 是为单机设计的,缓存容量受限于运行 MySQL 的主机内存。

但面试官好像对这个回答不太满意
现在回想起来,虽然当时是我混淆了“MySQL 查询缓存”和“MySQL 的 Buffer Pool”,但是,MySQL 的 Buffer Pool 也起到了缓存作用,减少磁盘 IO 。

为什么 MySQL 有缓存,还要使用 Redis ?
这个问题,目前我只想到从两个角度回答:
1. Redis 支持分片集群,缓存容量容易扩展。
2. 多级缓存。Redis 内存->Buffer Pool->磁盘。
各位还有什么别的看法吗?
6561 次点击
所在节点    Redis
46 条回复
yabo083
238 天前
复习下八股:mysql 查询缓存的缺点:虽然可以提升查询性能,但是每次查询都要做一次缓存(如果失效的话,而失效的情况还很多),失效还要销毁。而且查询缓存在 8.0 以上版本已经不再支持。redis 优点:高性能,高并发( 1w qps ,mysql ; 10w~30w ,redis 单机+使用缓存)
tyrantZhao
238 天前
mysql 缓存是有限制的,并不是所有的内容都在内存中,而 redis 所有内容都在内存
aijam
238 天前
这不就和 CPU 有缓冲那为什么要有内存差不多道理吗
yinmin
238 天前
最关键点是性能不一样
PTLin
238 天前
查询速度不是一个量级的,MySQL 查询起码要进行 SQL 解析,查询计划分析不同索引的查询成本,把页加载到 Buffer 里,生成 ReadView ,B+树页的解析,条目的定位,层层的查询,返回给用户等等操作。
redis ,直接走内存,用的数据结构也都是比较简单的 hashmap ,list ,skiplist 什么的,因为全在内存中,所以不需要使用 B 树这种可以部分读取的结构,速度自然就很快。
Ericcccccccc
238 天前
想到另外一个问题, 面试官说的缓存很可能是 buffpool, 要是没有这玩意每次都去磁盘里读数据那是慢到姥姥家了. 很多慢查询都是冷数据 buffpool 里没有.
opengps
238 天前
MySQL 的缓存,存了索引和临时结果集,并不是彻底的之操作内存
Kumo31
238 天前
两码事,最根本的区别是他们的设计目的不一样,Redis 就是为内存而设计的,MySQL 等大部分 RDBMS 都是为磁盘设计的,这就导致 MySQL 的数据就算能全量存进内存,这一套查询结构的速度也比面向内存的设计慢的多
tairan2006
238 天前
MySQL 的数据结构和 Redis 差别很大啊

如果只用 kv ,也可以用 memorycache ,并不一定非要 Redis

而且关系型数据库的 kv ,也不支持过期吧
me1onsoda
238 天前
@opengps 那这个结果集存在哪里呢
hefish
238 天前
这问题就笑笑吧。 为什么厂区养了条狗还要招保安。为什么家里有固定电话,还去买个手机?
ccnocc
238 天前
@Worldispow #7 还得是你
nise
238 天前
从面试官的角度思考一下,应该是考你架构能力,不同的东西有不同的适用场景,这两个就不是一个东西,一个是关系型数据库,一个是 kv 系统,那你就扯一下关系型数据库用来干啥,kv 系统用来干啥。总之不要被他绕进去,思考一下这个问题背后
julyclyde
238 天前
mysql 现在没有缓存了吗?从哪个版本开始啊
才几年没用,变化这么大啊
seers
238 天前
估计已经没多少人听说过数据库要 warm up buffer pool 了,属于 DBA 的时代眼泪啊
codewld
238 天前
MySQL 缓存磁盘中的数据页,是对数据的缓存; Redis 缓存查询结果,是对结果的缓存
princeofwales
237 天前
oracle 的缓存,主要是 sga 里的 buffer cache 和 shared pool ,前者缓存从磁盘获取到的数据,后者缓存解析 sql 的中间值
oracle 的内存数据库,是叫 timesten ,在一个公安的人口登录系统里搞过一次
sleepm
237 天前
看业务需求
比如,统计
mysql 缓存,效率不高,比较写会比较频繁,缓存也没有意义了
redis 的话,随便写随便读
xuanbg
237 天前
此缓存非彼缓存呀
bianhui
237 天前
浏览器还有缓存,王者荣耀还有缓存了,为啥还用 redis 。两个压根不是一回事吧,不是说名字一样,描述的就是一种东西。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/979119

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX