

















这是一个创建于 964 天前的主题,其中的信息可能已经有所发展或是发生改变。
这是上次面试中,虽然面试官问我的问题,当时给我问迷糊了。
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->磁盘。
各位还有什么别的看法吗?
1 stinkytofu 2023 年 10 月 5 日从自己的角度回答就好了, 我的项目引入 Redis, 那肯定是因为 Redis 速度快, 好用, 这就是最主要的原因! |
2 Maboroshii 2023 年 10 月 5 日 via Androidmysql 缓存不可控吧,你哪知道缓存了啥。 |
3 amlee 2023 年 10 月 6 日mysql 做不了分布式缓存吧? |
4 ration 2023 年 10 月 6 日 via Android1.redis 不止用于缓存 2.如上面所说可控性,还有缓存时间,缓存数据结构,很多方面都可以研究下 |
5 Ericcccccccc 2023 年 10 月 6 日如果单从为了获得 key-value 的角度来讲, redis 相比起 mysql 会更便宜. |
6 fredcc 2023 年 10 月 6 日 via AndroidThe query cache is deprecated as of MySQL 5.7.20, and is removed in MySQL 8.0. |
7 Worldispow 2023 年 10 月 6 日 via Android为什么用 redis 不用 oracle ? |
8 wonderfulcxm 2023 年 10 月 6 日 via iPhone@fredcc 为什么后来的 MySQL 要取消 query cache ?我发现 WordPress 官方给的优化建议有一条是开启 query cache ,在多读少写的站点,比如 blog 提速非常明显。 |
9 dw2693734d 2023 年 10 月 6 日为什么 MySQL 有缓存,硬盘还有设计缓存,CPU 也要设计缓存? |
10 devopsdogdog 2023 年 10 月 6 日 via Android更快的速度这点就够了。还有答的感觉就是刚工作和水瓶吧。 |
11 devopsdogdog 2023 年 10 月 6 日 via Android补充一下,应该是想让你说 nosql 这类型的数据库区别吧。毕竟是不同类型的数据库 |
12 darkengine 2023 年 10 月 6 日我要缓存一些不是数据库查询出来的结果, 或者是查出来后经过程序加工过的数据, MySQL query cache 就用不上了. |
14 buffzty 2023 年 10 月 6 日一个是硬盘 io,一个是内存 io |
15 murmur 2023 年 10 月 6 日redis 可以缓存处理好的数据 直接就是和前端拿到的东西八九不离十了 连加工都省掉了 |
16 OysterQAQ 2023 年 10 月 6 日可控性(包含对其进行操作,以及缓存粒度是方法级别还是对象级别),mysql 的缓存设计上就是面向 sql 尽量无感知的不可控的,缓存位于服务器层,甚至和存储引擎都是分离无关的 |
17 iorilu 2023 年 10 月 6 日两码事把 redis 是主动缓存, 你知道缓存了啥 数据库是自动缓存把, 他按他算法缓存, 但不一定是你要的 |
18 ieliwb 2023 年 10 月 6 日2 个东西,一个是关系型数据库,一个是非关系型,使用场景不一样 |
19 zjsxwc 2023 年 10 月 6 日因为 Mysql 的 Query Cache 只能单机单核 CPU 才有效,不方便 scale 分布式, |
20 wy315700 2023 年 10 月 6 日关于 Oracle 应该这么回答 Oracle 一切都很好,不管是性能还是稳定性,唯一的缺点是:贵 |
21 yabo083 2023 年 10 月 6 日 via Android复习下八股:mysql 查询缓存的缺点:虽然可以提升查询性能,但是每次查询都要做一次缓存(如果失效的话,而失效的情况还很多),失效还要销毁。而且查询缓存在 8.0 以上版本已经不再支持。redis 优点:高性能,高并发( 1w qps ,mysql ; 10w~30w ,redis 单机+使用缓存) |
22 GeminiPro 2023 年 10 月 6 日mysql 缓存是有限制的,并不是所有的内容都在内存中,而 redis 所有内容都在内存 |
23 aijam 2023 年 10 月 6 日这不就和 CPU 有缓冲那为什么要有内存差不多道理吗 |
24 yinmin 2023 年 10 月 6 日 via iPhone最关键点是性能不一样 |
25 PTLin 2023 年 10 月 6 日查询速度不是一个量级的,MySQL 查询起码要进行 SQL 解析,查询计划分析不同索引的查询成本,把页加载到 Buffer 里,生成 ReadView ,B+树页的解析,条目的定位,层层的查询,返回给用户等等操作。 |
26 Ericcccccccc 2023 年 10 月 6 日想到另外一个问题, 面试官说的缓存很可能是 buffpool, 要是没有这玩意每次都去磁盘里读数据那是慢到姥姥家了. 很多慢查询都是冷数据 buffpool 里没有. |
27 opengps 2023 年 10 月 6 日MySQL 的缓存,存了索引和临时结果集,并不是彻底的之操作内存 |
28 Kumo31 2023 年 10 月 6 日两码事,最根本的区别是他们的设计目的不一样,Redis 就是为内存而设计的,MySQL 等大部分 RDBMS 都是为磁盘设计的,这就导致 MySQL 的数据就算能全量存进内存,这一套查询结构的速度也比面向内存的设计慢的多 |
29 tairan2006 2023 年 10 月 6 日MySQL 的数据结构和 Redis 差别很大啊 如果只用 kv ,也可以用 memorycache ,并不一定非要 Redis 而且关系型数据库的 kv ,也不支持过期吧 |
31 hefish 2023 年 10 月 6 日这问题就笑笑吧。 为什么厂区养了条狗还要招保安。为什么家里有固定电话,还去买个手机? |
33 nise 2023 年 10 月 6 日从面试官的角度思考一下,应该是考你架构能力,不同的东西有不同的适用场景,这两个就不是一个东西,一个是关系型数据库,一个是 kv 系统,那你就扯一下关系型数据库用来干啥,kv 系统用来干啥。总之不要被他绕进去,思考一下这个问题背后 |
34 julyclyde 2023 年 10 月 6 日mysql 现在没有缓存了吗?从哪个版本开始啊 |
35 seers 2023 年 10 月 6 日估计已经没多少人听说过数据库要 warm up buffer pool 了,属于 DBA 的时代眼泪啊 |
36 codewld 2023 年 10 月 6 日MySQL 缓存磁盘中的数据页,是对数据的缓存; Redis 缓存查询结果,是对结果的缓存 |
37 princeofwales 2023 年 10 月 6 日oracle 的缓存,主要是 sga 里的 buffer cache 和 shared pool ,前者缓存从磁盘获取到的数据,后者缓存解析 sql 的中间值 |
38 sleepm 2023 年 10 月 6 日看业务需求 |
39 xuanbg 2023 年 10 月 7 日此缓存非彼缓存呀 |
40 bianhui 2023 年 10 月 7 日浏览器还有缓存,王者荣耀还有缓存了,为啥还用 redis 。两个压根不是一回事吧,不是说名字一样,描述的就是一种东西。 |
41 8355 2023 年 10 月 7 日其实面试官想听到的是为什么不使用 mysql 缓存。。。。 |
42 zzzmh 2023 年 10 月 7 日要是我我就回答 因为别人都在用 我凑热闹 |
43 xiang0818 2023 年 10 月 7 日MySQL 有查询缓存功能可以缓存查询结果以提高查询性能,但是查询缓存有一些限制,例如缓存失效的开销、缓存命中率低等。此外,MySQL 的查询缓存功能在 MySQL 8.0 版本中已被弃用并在后续版本中被删除。 相比之下,Redis 是一个内存数据存储,它提供了更高级的功能和更高的可伸缩性和高可用性。 因此,虽然 MySQL 的缓存功能可以提高查询性能,但它的局限性较大。为了提高应用程序的性能和可伸缩性,使用 Redis 作为缓存存储通常是更好的选择,即使 MySQL 有缓存功能。 |
44 gav1nvv 2023 年 10 月 7 日Redis 和数据库的场景完全不同,并发量也完全不在一个量级,通常 Redis 会做集群用于,登陆 token 存储,临时数据存储,防止数据库穿透等用途,假如用关系数据库也可以实现,但是结构复杂,效率低下,一旦发生变更缓存失效(因为经常修改的话相当于没缓存)。面试官想问你的其实是关系型数据库和 key-value 数据库的区别和用途 |
45 Pantheoon 2023 年 10 月 7 日redis 可以缓存聚合的结果,是人为可控的,你想塞啥塞啥,mysql 的缓存更多的是它的查询优化,这个东西可控性比较低,而且它的逻辑只有它自己知道 |
46 xiaoyureed 2023 年 11 月 10 日这个好回答呀, redis 缓存一般工作在业务层, 缓存的都是经过聚合/计算后的数据, 和数据库自己的缓存可差远了 |
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。