认识Redis:Redis 是什么?好处?业务场景?和MySQL的区别?

思维导图

本文的思维导图如下:

一、认识 Redis

1. Redis 是什么?

Redis 是一个开源的、基于内存 的数据结构存储系统 ,可以作为数据库、缓存和消息中间件。

Redis 提供了丰富的数据结构,包括基础类型和高级类型。

基础类型有:

  • String(字符串)
  • Hash(哈希)
  • List(列表)
  • Set(集合)
  • ZSet(有序集合)

高级类型:

  • Bitmaps(位图)
  • HyperLogLogs(基数统计)
  • GEO(地理信息)
  • Stream(流)

除此之外,Redis 还内置了以下功能:

  • 事务
  • 发布/订阅
  • LUA 脚本
  • 多集群方案(主从复制模式、哨兵模式、切片集群模式)
  • 不同级别的磁盘持久化
  • 过期删除机制
  • 内存淘汰机制
  • . . .

2. Redis 的优势

使用 Redis,有以下几个显著的好处:

  1. 高性能: Redis 的数据存储在内存中,所有的读写操作都是在内存中完成,因此读写速度极快,适合高并发场景。
  2. 丰富的数据结构: Redis 支持多种数据结构,比如字符串、哈希、列表、集合、有序集合等等,以满足多样化的需求。
  3. 持久化: Redis 支持 RDB 和 AOF 两种持久化方式,以确保数据安全。

扩展:MySQL 先写日志持久化后再写磁盘数据,Redis 先写内存数据之后再通过日志持久化。

这也就导致了 Redis 的持久化不管如何操作都可能会导致数据丢失(主要是服务器故障,服务器不出问题的情况下还是可以保证数据安全的。)

  1. 高可用性: Redis 通过 主从复制 和 哨兵模式 实现故障转移,保障服务连续性。
  2. 分布式: Redis 支持 集群模式,可水平扩展,以处理大规模数据。
  3. 多功能:Redis 提供事务 、发布订阅 、Lua 脚本等功能,增强灵活性。

注意:Redis 不支持绝对的 ACID,但是基本的事务能力是可以提供的。

  • 原子性:通过命令队列保证,在命令没有语法(编译时错误)的情况下,可以按原子执行,但运行时错误无法回滚,且会继续执行后续命令。
  • 隔离性:单线程
  • 持久性:RDB 和 AOF 可以保证不出故障时可以保证。
  • 一致性:只要持久性不出故障,原子性不出运行时错误,一致性就是可以保证的。

综上,就是对 Redis 支持事务但不支持绝对的 ACID 的解释。

  1. 应用广泛: Redis 适用于缓存、会话存储、消息队列、实时排行榜等场景。

综上,这些优势使得 Redis 成为高性能数据存储和缓存的理想选择。

3. 为什么选择 Redis 作为 MySQL 的缓存?

使用 Redis 作为 MySQL 的缓存有以下几个主要原因:

  1. 提升性能: ++Redis 将数据存储在内存中++ ,其读写速度远快于++将数据存储在磁盘的 MySQL++,让 Redis 作为 MySQL 的缓存,可以显著减少数据库的查询延迟。
  2. 减轻数据库负载: 通过 Redis 缓存频繁访问的数据,可以减少对 MySQL的直接查询,降低数据库的压力,从而提高系统整体性能。
  3. 高并发支持: Redis 能处理大量并发请求,适合高流量场景,避免 MySQL 成为瓶颈。
  4. 丰富的数据结构: Redis 支持多种数据结构(如字符串、哈希、列表等),便于缓存复杂查询结果或中间数据。
  5. 缓存失效策略: Redis 支持设置缓存过期时间,确保数据及时更新,避免脏数据。
  6. 高可用性: Redis 提供主从复制和持久化功能,确保缓存数据的高可用性和可靠性

综上,Redis 作为 MySQL 的缓存,可以显著提升系统性能、降低数据库负载,并支持高并发场景。

4. Redis 的经典业务场景

Redis 常用的业务场景如下:

  1. 对热点数据的缓存: 因为 Redis 支持多种数据类型,数据存储在内存中,访问速度极快,所以 Redis 很适合用来存储热点数据。

  2. 分布式锁的实现: 可以利用 Redis 的 setnx 命令进行。

  3. 排行榜的实现: 借助 ZSet 进行热点数据的排序。例如:下单量最多的用户排行榜,最热门的帖子(回复最多)等业务场景;

  4. 限时类业务的实现: 可以++使用 expire 命令++ 设置 key 的生存时间,到时间后自动删除 key。例如使用在验证码验证 、优惠活动等业务场景;

  5. 计数器的实现: 因为 ++incrby 命令++ 可以实现原子性的递增,所以可以运用于高并发的秒杀活动 、分布式序列号的生成。例如限制一个手机号发多少条短信、一个接口一分钟限制多少请求、一个接口一天限制调用多少次等业务场景。

  6. 队列机制的实现: Redis 提供了 listpush 和 list pop 两个命令,所以能够很方便的执行队列操作。

二、相关面试题

1. 什么是 Redis?常用业务场景?

  • Redis 是一个开源的、基于内存的数据结构存储系统 ,对数据的读写操作都是在内存中完成的,因此读写速度非常快 ,常用于缓存、消息队列、分布式锁等场景。

  • 它支持多种数据结构,比如字符串、哈希、列表、集合、有序集合等。

  • 此外,Redis还支持事务、持久化、过期删除机制、内存淘汰机制、多集群方案等等,适用于高并发场景。

2. 使用 Redis 有哪些好处?

  1. 第一个好处是高性能 :因为 Redis 的数据都是存储在内存中的,所有的读写操作都是在内存中完成,所以读取速度极快。
  2. 第二个好处是 Redis 支持丰富的数据结构,比如字符串、列表、集合、有序集合、哈希等;
  3. 第三个好处是持久化: Redis 会通过 RDB 和 AOF 两种持久化方式,来确保数据安全。
  4. 此外,Redis 还拥有其他丰富的功能,比如 发布订阅、Lua脚本、主从复制等功能。

3. 为什么有了 MySQL,还要 Redis?

因为 MySQL 作为数据库系统,它对于数据的操作需要访问磁盘。

而我们将那些频繁访问的数据放在 Redis 中,需要访问时就可以直接从内存获取,避免磁盘 I/O,从而提高操作的速度。

所以使用 Redis + MySQL 结合的方式可以有效提高系统 QPS。

4. 为什么用 MySQL 作存储,Redis 作缓冲?

  • 为什么用 MySQL 做存储: MySQL 适用于存储持久化数据、需要保证数据一致性、支持复杂查询和事务管理的场景。

  • 为什么用 Redis 做缓存: Redis 适用于快速访问、临时存储、高并发和低延迟需求的场景,尤其是在需要缓存热点数据、减少数据库负载的情况下。

5. Redis 常用的业务场景有哪些?

Redis 常用业务场景包括缓存、计数器、分布式锁、排行榜等。

其中缓存 和分布式锁是最核心且最广泛的应用场景。

  • 因为 Redis 支持多种数据类型,它的数据存储在内存中,访问速度极快,所以 Redis 很适合用来存储热点数据;
  • 此外,我们可以利用 Redis 的 setnx 命令进行分布式锁的实现。
相关推荐
中云DDoS CC防护蔡蔡4 小时前
DDOS和CC攻击谁更可怕
运维·服务器·经验分享·网络安全·ddos
Ruiery4 小时前
Linux 6.6内核内存管理深度解析(十六):mmap — 用户态“申请内存“的真相
linux·运维·服务器
ClickHouseDB4 小时前
ClickHouse Cloud 与 Snowflake 实时性价比对比:CostBench 测试中的 412 倍差距来
运维·数据库·系统架构
第九序言T4 小时前
Python 数据处理进阶(十八)批量处理同结构文件:一个文件夹一次跑完
开发语言·python·自动化·pandas·数据处理
m0_639906944 小时前
Redis入门|五种数据结构、使用场景、持久化RDB&AOF
数据结构·数据库·redis
欧米欧4 小时前
Linux系统篇(七),环境变量的底层溯源,核心获取机制与安全应用
linux·运维·服务器
Ruiery4 小时前
Linux 6.6内核内存管理深度解析(十八):KASLR 内核地址空间随机化
linux·运维·服务器·安全
时间售卖铺5 小时前
触发器与函数实战:MySQL高效编程秘诀
运维·数据库·mysql·云原生
qetfw5 小时前
UOS MariaDB 数据库:安装、最小权限与备份验证
linux·数据库·mariadb·uos
前端精髓5 小时前
调用大模型API
运维·服务器·microsoft