为什么 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->磁盘。
各位还有什么别的看法吗?
8233 次点击
所在节点    Redis
46 条回复
8355
2023 年 10 月 7 日
其实面试官想听到的是为什么不使用 mysql 缓存。。。。
mysql 缓存在数据变更后缓存失效,包括表结构变更,索引变更和数据变更。
zzzmh
2023 年 10 月 7 日
要是我我就回答 因为别人都在用 我凑热闹
xiang0818
2023 年 10 月 7 日
MySQL 有查询缓存功能可以缓存查询结果以提高查询性能,但是查询缓存有一些限制,例如缓存失效的开销、缓存命中率低等。此外,MySQL 的查询缓存功能在 MySQL 8.0 版本中已被弃用并在后续版本中被删除。

相比之下,Redis 是一个内存数据存储,它提供了更高级的功能和更高的可伸缩性和高可用性。
1 、Redis 支持不同类型的数据缓存,例如键值对、列表、哈希表、集合等。
2 、Redis 还支持分布式缓存,可以在多个节点上进行缓存,提高了可伸缩性和高可用性。

因此,虽然 MySQL 的缓存功能可以提高查询性能,但它的局限性较大。为了提高应用程序的性能和可伸缩性,使用 Redis 作为缓存存储通常是更好的选择,即使 MySQL 有缓存功能。
gav1nvv
2023 年 10 月 7 日
Redis 和数据库的场景完全不同,并发量也完全不在一个量级,通常 Redis 会做集群用于,登陆 token 存储,临时数据存储,防止数据库穿透等用途,假如用关系数据库也可以实现,但是结构复杂,效率低下,一旦发生变更缓存失效(因为经常修改的话相当于没缓存)。面试官想问你的其实是关系型数据库和 key-value 数据库的区别和用途
Pantheoon
2023 年 10 月 7 日
redis 可以缓存聚合的结果,是人为可控的,你想塞啥塞啥,mysql 的缓存更多的是它的查询优化,这个东西可控性比较低,而且它的逻辑只有它自己知道
xiaoyureed
2023 年 11 月 10 日
这个好回答呀, redis 缓存一般工作在业务层, 缓存的都是经过聚合/计算后的数据, 和数据库自己的缓存可差远了

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

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

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

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

© 2021 V2EX