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

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

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

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

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

https://study.congcong.us/t/979119

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

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

© 2021 V2EX