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

2023-10-05 23:48:33 +08:00
 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->磁盘。
各位还有什么别的看法吗?
7687 次点击
所在节点    Redis
46 条回复
stinkytofu
2023-10-05 23:51:13 +08:00
从自己的角度回答就好了, 我的项目引入 Redis, 那肯定是因为 Redis 速度快, 好用, 这就是最主要的原因!
Maboroshii
2023-10-05 23:56:42 +08:00
mysql 缓存不可控吧,你哪知道缓存了啥。
amlee
2023-10-06 00:06:37 +08:00
mysql 做不了分布式缓存吧?
ration
2023-10-06 00:11:36 +08:00
1.redis 不止用于缓存 2.如上面所说可控性,还有缓存时间,缓存数据结构,很多方面都可以研究下
Ericcccccccc
2023-10-06 00:15:22 +08:00
如果单从为了获得 key-value 的角度来讲, redis 相比起 mysql 会更便宜.
fredcc
2023-10-06 00:31:40 +08:00
The query cache is deprecated as of MySQL 5.7.20, and is removed in MySQL 8.0.
哪怕 MySQL 有缓存,也是基于查询 SQL 的。不能代替业务级别的缓存。比如分布式应用情况下的用户会话缓存,又比如一个结果集是多个 SQL 查询结果经过业务逻辑处理后需要缓存。
不知道面试官对比这两个东西出于什么目的。
Worldispow
2023-10-06 07:15:26 +08:00
为什么用 redis 不用 oracle ?
穷。
wonderfulcxm
2023-10-06 08:15:12 +08:00
@fredcc 为什么后来的 MySQL 要取消 query cache ?我发现 WordPress 官方给的优化建议有一条是开启 query cache ,在多读少写的站点,比如 blog 提速非常明显。
dw2693734d
2023-10-06 08:24:52 +08:00
为什么 MySQL 有缓存,硬盘还有设计缓存,CPU 也要设计缓存?
devopsdogdog
2023-10-06 09:44:36 +08:00
更快的速度这点就够了。还有答的感觉就是刚工作和水瓶吧。
devopsdogdog
2023-10-06 09:47:33 +08:00
补充一下,应该是想让你说 nosql 这类型的数据库区别吧。毕竟是不同类型的数据库
darkengine
2023-10-06 10:01:28 +08:00
我要缓存一些不是数据库查询出来的结果, 或者是查出来后经过程序加工过的数据, MySQL query cache 就用不上了.
SethShi
2023-10-06 10:05:47 +08:00
无它, 快
buffzty
2023-10-06 10:12:07 +08:00
一个是硬盘 io,一个是内存 io
murmur
2023-10-06 10:19:28 +08:00
redis 可以缓存处理好的数据 直接就是和前端拿到的东西八九不离十了 连加工都省掉了
OysterQAQ
2023-10-06 10:24:39 +08:00
可控性(包含对其进行操作,以及缓存粒度是方法级别还是对象级别),mysql 的缓存设计上就是面向 sql 尽量无感知的不可控的,缓存位于服务器层,甚至和存储引擎都是分离无关的
iorilu
2023-10-06 10:33:35 +08:00
两码事把

redis 是主动缓存, 你知道缓存了啥

数据库是自动缓存把, 他按他算法缓存, 但不一定是你要的
ieliwb
2023-10-06 10:46:42 +08:00
2 个东西,一个是关系型数据库,一个是非关系型,使用场景不一样
zjsxwc
2023-10-06 10:58:35 +08:00
因为 Mysql 的 Query Cache 只能单机单核 CPU 才有效,不方便 scale 分布式,
也因为 proxysql 这个能解决上面 Mysql 缺点的 mysql 中间代理层软件与 oracle 有 py 交易,让 oracle 把 mysql8.0 开始删掉了 Query Cache 功能。
wy315700
2023-10-06 11:12:35 +08:00
关于 Oracle 应该这么回答

Oracle 一切都很好,不管是性能还是稳定性,唯一的缺点是:贵

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

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

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

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

© 2021 V2EX