Redis为什么快&为什么要用Redis&适配场景&与Mysql对比

1 篇文章 0 订阅
1 篇文章 0 订阅

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事务补充

  1. MULTI:MULTI 命令用于开始一个事务。在 MULTI 命令执行之后,客户端可以向 Redis 发送多个命令,这些命令将会被放入一个队列中,但并不会立即执行。
  2. EXEC:EXEC 命令用于执行事务中的所有命令。一旦 EXEC 命令被调用,Redis 将按照先前入队的顺序执行所有命令。如果在执行事务期间出现错误,Redis 会回滚事务,并返回错误信息。
  3. DISCARD:DISCARD 命令用于取消事务,清空事务队列中的所有命令。
  4. 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

  • 34
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值