认识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 会通过 RDBAOF 两种持久化方式,来确保数据安全。
  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 命令进行分布式锁的实现
相关推荐
_lst_43 分钟前
进程控制:进程程序切换
linux·服务器·ssh
..空空的人1 小时前
C++基于protobuf实现仿RabbitMQ消息队列---接口介绍
开发语言·c++·rabbitmq
二进制_博客1 小时前
全新redis8.0在centos7.5的安装
redis·nosql·redis8
JIngJaneIL1 小时前
基于Java失物招领系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·vue
豐儀麟阁贵1 小时前
9.3获取字符串信息
java·开发语言·前端·算法
kusedexingfu1 小时前
如何理解python中的闭包
开发语言·python
Protein_zmm1 小时前
第二章 应用层(套接字编程)
开发语言·计算机网络·php
Orange_sparkle1 小时前
Windows/Linux离线部署IndexTTS2
linux·运维·服务器
by__csdn1 小时前
ES6新特性全攻略:JavaScript的现代革命
开发语言·前端·javascript·typescript·ecmascript·es6·js