1. 什么是 Redis?#
分析
Redis 是一个基于内存、支持多种数据结构的存储系统,可以作为数据库、缓存和消息中间件。它支持的数据结构有字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)、有序集合(sorted sets)等,除此之外还支持 bitmaps、hyperloglogs 和地理空间(geospatial)索引半径查询等功能。
它内置了复制(Replication)、Lua 脚本(Lua scripting)、LRU 驱动事件(LRU eviction)、事务(Transactions)和不同级别的磁盘持久化(persistence)功能,并通过 Redis 哨兵(sentinel)和集群(Cluster)保证缓存的高可用性(High availability)。
回答时简洁明了,不用面面俱到。
回答
Redis 是一个开源的内存数据结构存储系统,支持多种数据结构(如字符串、哈希、列表、集合等),常用于缓存、分布式锁。它通过将数据存储在内存中实现高速读写,并支持持久化到磁盘,确保数据安全。Redis 还提供主从复制、事务和 Lua 脚本等功能,适用于高并发场景。
2. 使用 Redis 有哪些好处?#
分析
使用 Redis 有以下几个显著好处:
- 高性能:数据存储在内存中,读写速度极快,适合高并发场景;
- 丰富的数据结构:支持字符串、哈希、列表、集合、有序集合等多种数据结构,满足多样化需求;
- 持久化:支持 RDB 和 AOF 两种持久化方式,确保数据安全;
- 高可用性:通过主从复制和哨兵模式实现故障转移,保障服务连续性;
- 分布式:支持集群模式,可水平扩展,处理大规模数据;
- 多功能:提供事务、发布订阅、Lua 脚本等功能,增强灵活性;
- 广泛应用:适用于缓存、会话存储、消息队列、实时排行榜等场景。
这些优势使 Redis 成为高性能数据存储和缓存的理想选择,回答时选几个点来说就行,高性能和持久化一定要提到。
回答
具有以下好处:
- 读取速度快,因为数据存在内存中,所以数据获取快;
- 支持多种数据类型,包括字符串、列表、集合、有序集合、哈希等;
- 还拥有其他丰富的功能,队列、主从复制、集群、数据持久化等功能。
3. 为什么 MySQL 做存储,Redis 做缓存?#
分析
使用 Redis 作为 MySQL 的缓存有以下几个主要原因:
- 提升性能:Redis 将数据存储在内存中,读写速度远快于基于磁盘的 MySQL,显著减少数据库查询延迟;
- 减轻数据库负载:通过缓存频繁访问的数据,减少对 MySQL 的直接查询,降低数据库压力,提高系统整体性能;
- 高并发支持:Redis 能处理大量并发请求,适合高流量场景,避免 MySQL 成为瓶颈;
- 灵活数据结构:Redis 支持多种数据结构(如字符串、哈希、列表等),便于缓存复杂查询结果或中间数据;
- 缓存失效策略:Redis 支持设置缓存过期时间,确保数据及时更新,避免脏数据;
- 高可用性:Redis 提供主从复制和持久化功能,确保缓存数据的高可用性和可靠性。
综上,Redis 作为 MySQL 缓存能显著提升系统性能、降低数据库负载,并支持高并发场景。
回答
MySQL 是数据库系统,对于数据的操作需要访问磁盘,而将数据放在 Redis 中,需要访问就可以直接从内存获取,避免磁盘 I/O,提高操作的速度,使用 Redis + MySQL 结合的方式可以有效提高系统 QPS。
4. Redis 常用的业务场景有哪些?#
分析
主要常用的业务场景有:
- 对热点数据的缓存:因为 Redis 支持多种数据类型,数据存储在内存中,访问速度快,所以 Redis 很适合用来存储热点数据;
- 限时类业务的实现:可以使用
expire命令设置 key 的生存时间,到时间后自动删除 key。例如用在验证码验证、优惠活动等业务场景; - 计数器的实现:因为
incrby命令可以实现原子性的递增,所以可以运用于高并发的秒杀活动、分布式序列号的生成。例如限制一个手机号发多少条短信、一个接口一分钟限制多少请求、一个接口一天限制调用多少次等业务场景; - 排行榜的实现:借助 Sorted Set 进行热点数据的排序。例如下单量最多的用户排行榜、最热门的帖子(回复最多)等业务场景;
- 分布式锁实现:可以利用 Redis 的
setnx命令进行; - 队列机制实现:Redis 提供了
list push和list pop这样的命令,所以能够很方便地执行队列操作。
回答
Redis 常用业务场景包括缓存、计数器、分布式锁、排行榜等,其中缓存和分布式锁是最核心和广泛的应用场景。