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