redis为什么快
保存在内存中,内存访问速度比磁盘快
单线程,Redis 基于 Reactor 模式设计开发了一套高效的事件处理模型,主要是单线程事件循环和 IO 多路复用
Redis内置多种数据类型,这几种数据类型的性能好
Redis通信协议简单
都这么快了,为什么不用Redis直接当主数据库?
为什么Redis比Mysql快那么多,不直接使用Redis组建数据库?
Redis 和 MySQL 是两种不同类型的数据库,它们的设计目标和适用场景有所不同,因此性能方面的比较可能不太公平。
首先,Redis 是一种基于内存的数据存储系统,而 MySQL 则是基于磁盘的关系型数据库管理系统(RDBMS)。Redis 的主要优势在于其快速的读写能力,因为数据存储在内存中,而 MySQL 则需要在磁盘上进行读写操作。对于许多读取密集型的应用程序,例如缓存、会话存储等,Redis 可以提供非常高的性能,因为它可以快速地读取数据而无需进行磁盘 I/O 操作。
然而,MySQL 在许多方面也具有优势,特别是在数据持久性、复杂查询、事务支持等方面。MySQL 是一种成熟的关系型数据库系统,支持 SQL 查询语言和 ACID 事务特性,适用于需要复杂数据查询和事务处理的应用程序。此外,MySQL 提供了丰富的功能,如索引、复制、分区等,使其可以应对各种数据管理需求。
因此,Redis 和 MySQL 通常用于不同的用例和场景中。Redis 更适用于需要高速读写和缓存的场景,而 MySQL 则更适用于需要复杂查询和事务支持的应用程序。实际上,有时候这两种数据库系统会被组合使用,例如将 Redis 用作缓存层,而 MySQL 用作持久性存储层。
内存成本高,Redis提供的数据持久化有数据丢失的风险
redis优势概括
- 支持丰富的数据类型,支持各种应用场景
- 支持数据持久化,支持AOF、RDB两种方式的持久化,可以通过具体参数设计和混合式使用来更好地适配系统
- 支持集群,可以更灵活地实现持久化和容灾
- 单线程,IO多路复用(轮询,避免了 线程切换和上下文切换的开销,从而提高系统的性能和吞吐量)
- Redis的释放内存方式多元化,有惰性删除、定期删除,也可以定义删除的范围
- Redis支持事务
Redis事务补充
- MULTI:MULTI 命令用于开始一个事务。在 MULTI 命令执行之后,客户端可以向 Redis 发送多个命令,这些命令将会被放入一个队列中,但并不会立即执行。
- EXEC:EXEC 命令用于执行事务中的所有命令。一旦 EXEC 命令被调用,Redis 将按照先前入队的顺序执行所有命令。如果在执行事务期间出现错误,Redis 会回滚事务,并返回错误信息。
- DISCARD:DISCARD 命令用于取消事务,清空事务队列中的所有命令。
- WATCH:WATCH 命令用于在事务执行之前监视一个或多个键。如果在事务执行期间,任何被监视的键被修改,事务将被中止。
Redis 的事务具有以下特性:
- 原子性:事务中的所有命令要么全部执行成功,要么全部失败,Redis 不支持部分执行事务的情况。
- 隔离性:在一个事务执行期间,Redis 不会执行其他客户端的命令,事务中的命令都会原子地执行。
- 一致性:事务中的所有命令在执行结束后,数据库的状态将会与执行前一致。
- 持久性:事务中的所有命令在 EXEC 执行成功后,会被持久化到磁盘中。
虽然 Redis 支持事务,但需要注意的是,Redis 的事务不支持回滚。如果事务中的某个命令执行失败,事务仍然会继续执行剩余的命令,并不会回滚之前执行成功的命令。因此,在使用 Redis 事务时,需要谨慎处理每个命令的执行结果。
为什么要用Redis
1、快(相对于mysql这种关系型数据库来讲 -- 依赖磁盘),基于内存
2、可以实现分布式锁,高并发场景实用
3、分担数据库压力,做中间缓存地带,常读的数据就放在redis里随时取用
4、支持消息队列等场景,适用性广
Redis和Mysql的对比
1.mysql和redis的数据库类型
mysql是关系型数据库,主要用于存放持久化数据,将数据存储在硬盘中,读取速度较慢。
redis是NOSQL,即非关系型数据库,也是缓存数据库,即将数据存储在缓存中,缓存的读取速度快,能够大大的提高运行效率,但是保存时间有限
2.mysql的运行机制
注 : 因为mysql的负载是有限的,有些高频的访问我们应该考虑用缓存作缓冲区,因为缓存设计出来的一个主要原因就是减少数据库负担。再就是redis是基于内存的,读取速度更快,mysql本身是基于硬盘的,虽然有缓存区的设计,但是自身查询起来还是不如redis快。第三点,为什么不全部用redis呢,因为内存的存储空间是比硬盘少很多的,单位体积的存储空间也比硬盘贵,因此考虑用mysql做全量的数据存储,redis用来做一些常访问的数据的存储,提高系统响应速度,降低mysql负载。
mysql作为持久化存储的关系型数据库,相对薄弱的地方在于每次请求访问数据库时,都存在着I/O操作,如果反复频繁的访问数据库。第一:会在反复链接数据库上花费大量时间,从而导致运行效率过慢;第二:反复的访问数据库也会导致数据库的负载过高,那么此时缓存的概念就衍生了出来。
3.缓存
缓存就是数据交换的缓冲区(cache),当浏览器执行请求时,首先会对在缓存中进行查找,如果存在,就获取;否则就访问数据库。
缓存的好处就是读取速度快
4.redis数据库
redis数据库就是一款缓存数据库,用于存储使用频繁的数据,这样减少访问数据库的次数,提高运行效率。
5.redis和mysql的区别总结
(1)类型上
从类型上来说,mysql是关系型数据库,redis是缓存数据库
(2)作用上
mysql用于持久化的存储数据到硬盘,功能强大,但是速度较慢
redis用于存储使用较为频繁的数据到缓存中,读取速度快
(3)需求上
mysql和redis因为需求的不同,一般都是配合使用。
补充: redis和mysql要根据具体业务场景去选型
mysql:数据放在磁盘 redis:数据放在内存
redis适合放一些频繁使用,比较热的数据,因为是放在内存中,读写速度都非常快,一般会应用在下面一些场景
排行榜、计数器、消息队列推送、好友关注、粉丝
首先要知道mysql存储在磁盘里,redis存储在内存里,redis既可以用来做持久存储,也可以做缓存,而目前大多数公司的存储都是mysql + redis,mysql作为主存储,redis作为辅助存储被用作缓存,加快访问读取的速度,提高性能 那么为什么不直接全部用redis存储呢? 我的看法是:因为redis存储在内存中,如果存储在内存中,存储容量肯定要比磁盘少很多,那么要存储大量数据,只能花更多的钱去购买内存,造成在一些不需要高性能的地方是相对比较浪费的,所以目前基本都是mysql(主) + redis(辅),在需要性能的地方使用redis,在不需要高性能的地方使用mysql,好钢用在刀刃上 1、mysql支持sql查询,可以实现一些关联的查询以及统计;
2、redis对内存要求比较高,在有限的条件下不能把所有数据都放在redis;
3、mysql偏向于存数据,redis偏向于快速取数据,但redis查询复杂的表关系时不如mysql,所以可以把热门的数据放redis,mysql存基本数据
先加强基础知识学习然后慢慢做项目 - 》 然后秋招乱杀 - 》 稳辣
部分参考了Redis常见面试题总结(上) | JavaGuide 和Chatgpt