找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

4781

积分

0

好友

655

主题
发表于 4 天前 | 查看: 13| 回复: 0

后端项目如果用到分布式缓存的话,一般用的都是 Redis。不过,Redis 不仅仅能做缓存,还能用作分布式锁、延时队列、限流等等。

这篇文章梳理了 7 道关于 Redis 最基础性的问题,不涉及数据类型、持久化、线程模型等进阶内容,适合用来检验自己对 Redis 基础知识的掌握情况。

什么是 Redis?

Redis (REmote DIctionary Server)是一个基于 C 语言开发的开源 NoSQL 数据库(BSD 许可)。与传统数据库不同,Redis 的数据主要保存在内存中(内存数据库,支持持久化),因此读写速度非常快,被广泛应用于分布式缓存方向。它存储的是 KV 键值对数据。

为了满足不同的业务场景,Redis 内置了多种数据类型(如 String、Hash、Sorted Set、Bitmap、HyperLogLog、GEO)。此外,Redis 还支持事务、持久化、Lua 脚本,以及多种开箱即用的集群方案(如 Redis Sentinel、Redis Cluster)。

Redis 内置数据结构示例图

Redis 没有外部依赖,官方推荐生产环境使用 Linux 进行部署。个人学习时,可以本机安装,或者使用 Redis 官网提供的在线 Redis 环境(try-redis)进行体验,不过有少部分命令无法使用。

Try Redis 在线演示界面

Redis 为什么这么快?

Redis 的高性能主要归功于以下三点:

  1. 基于内存:数据存储在内存中,访问速度远高于磁盘。
  2. 高效的事件处理模型:基于 Reactor 模式,采用了单线程事件循环和 IO 多路复用技术。
  3. 优化的数据结构:内置了多种针对性能进行过极致优化的数据类型实现。

下图从存储层级、IO模型和数据结构三个层面清晰地展示了 Redis 高性能的原理。

Redis 高性能原理剖析图

分布式缓存常见的技术选型方案有哪些?

在分布式缓存领域,早期常用的是 Memcached,但现在基本被更强大的 Redis 所取代。

一些大厂也开源了类似的 KV 存储数据库,例如腾讯的 Tendis。它基于 RocksDB 存储引擎,完全兼容 Redis 协议。但根据其 Github 维护状态和社区热度,目前并不建议在生产中用作 Redis 的替代品。

目前业界讨论较多的 Redis 替代方案主要有两个:

  • Dragonfly:号称全球最快的内存数据库,完全兼容 Redis 和 Memcached API。
  • KeyDB:Redis 的一个高性能分支,专注于多线程和高吞吐量。

尽管如此,经过多年生产环境考验、生态完善且资料全面的 Redis 仍然是分布式缓存的首选。

说一下 Redis 和 Memcached 的区别和共同点

了解两者的异同,有助于我们在技术选型时做出更合理的决策。

共同点

  1. 都是基于内存的数据库,通常用作缓存。
  2. 都支持数据过期策略。
  3. 两者都具有很高的性能。

区别

  1. 数据类型:Redis 支持更丰富的数据类型(String、List、Hash、Set、Sorted Set 等),能应对更复杂的场景;Memcached 仅支持简单的 key-value。
  2. 持久化:Redis 支持将数据持久化到磁盘,重启后可恢复;Memcached 数据仅存在于内存中。
  3. 灾难恢复:得益于持久化能力,Redis 具备灾难恢复机制。
  4. 内存管理:Redis 在内存用尽后,可以将不常用的数据交换到磁盘;Memcached 则会直接返回错误。
  5. 集群:Redis 原生支持 Cluster 模式;Memcached 需要依靠客户端实现分片。
  6. 线程模型:Memcached 采用多线程模型;Redis 使用单线程 IO 多路复用模型(网络读写在 6.0 版本引入了多线程)。
  7. 功能特性:Redis 支持发布订阅、Lua 脚本、事务等,功能更全面,支持的编程语言也更广泛。
  8. 删除策略:Memcached 仅使用惰性删除;Redis 同时使用了惰性删除与定期删除。

综合来看,在当前的技术选型中,几乎没有理由再选择 Memcached 作为分布式缓存方案。

为什么要用 Redis/为什么要用缓存?

使用缓存(如 Redis)主要能带来“高性能”和“高并发”两方面的收益。

1、高性能
用户首次访问数据库中的某些数据时,速度较慢(磁盘 I/O)。如果这些数据是高频访问且不常变化的,将其放入缓存中,下次访问时可以直接从内存中读取,速度极快。

2、高并发
像 MySQL 这样的数据库,单机 QPS(每秒查询率)大约在 1w 左右。而使用 Redis 缓存后,单机很容易达到 10w+ QPS,甚至更高。这意味着,将部分数据库查询转移到缓存,可以承载远超直接访问数据库的请求量,从而显著提升系统的整体并发能力。

常见的缓存读写策略有哪些?

常见的缓存读写策略如 Cache Aside、Read/Write Through、Write Behind 等,它们各有适用场景,需要根据业务的一致性要求和性能需求进行选择。关于这部分内容的详细解读,可以查阅专门的文章。

什么是 Redis Module?有什么用?

从 4.0 版本开始,Redis 支持通过 Module 机制来动态扩展功能。这些 Module 以动态链接库(.so 文件)的形式加载,为 Redis 提供了极大的灵活性。

开发者可以基于此定制开发自己的 Module,实现搜索引擎、自定义分布式锁等功能。目前,一些官方推荐的 Module 包括:

  • RediSearch:搜索引擎模块。
  • RedisJSON:处理 JSON 数据的模块。
  • RedisGraph:图数据库模块。
  • RedisTimeSeries:时间序列数据处理模块。
  • RedisBloom:实现布隆过滤器的模块。
  • RedisCell:分布式限流模块。

想了解更多官方 Module,可以访问 https://redis.io/modules

希望这 7 个基础问题能帮助你巩固 Redis 的核心概念。学习技术时,打好基础至关重要。如果你想深入探讨更多后端架构与分布式系统知识,欢迎来云栈社区交流分享。




上一篇:技术选型失误复盘:几百条静态字典数据该用本地缓存还是Redis?
下一篇:Redis 核心机制与数据结构详解:从入门到高并发缓存实战
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-4-8 01:42 , Processed in 0.570589 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表