后端项目如果用到分布式缓存的话,一般用的都是 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 没有外部依赖,官方推荐生产环境使用 Linux 进行部署。个人学习时,可以本机安装,或者使用 Redis 官网提供的在线 Redis 环境(try-redis)进行体验,不过有少部分命令无法使用。

Redis 为什么这么快?
Redis 的高性能主要归功于以下三点:
- 基于内存:数据存储在内存中,访问速度远高于磁盘。
- 高效的事件处理模型:基于 Reactor 模式,采用了单线程事件循环和 IO 多路复用技术。
- 优化的数据结构:内置了多种针对性能进行过极致优化的数据类型实现。
下图从存储层级、IO模型和数据结构三个层面清晰地展示了 Redis 高性能的原理。

分布式缓存常见的技术选型方案有哪些?
在分布式缓存领域,早期常用的是 Memcached,但现在基本被更强大的 Redis 所取代。
一些大厂也开源了类似的 KV 存储数据库,例如腾讯的 Tendis。它基于 RocksDB 存储引擎,完全兼容 Redis 协议。但根据其 Github 维护状态和社区热度,目前并不建议在生产中用作 Redis 的替代品。
目前业界讨论较多的 Redis 替代方案主要有两个:
- Dragonfly:号称全球最快的内存数据库,完全兼容 Redis 和 Memcached API。
- KeyDB:Redis 的一个高性能分支,专注于多线程和高吞吐量。
尽管如此,经过多年生产环境考验、生态完善且资料全面的 Redis 仍然是分布式缓存的首选。
说一下 Redis 和 Memcached 的区别和共同点
了解两者的异同,有助于我们在技术选型时做出更合理的决策。
共同点:
- 都是基于内存的数据库,通常用作缓存。
- 都支持数据过期策略。
- 两者都具有很高的性能。
区别:
- 数据类型:Redis 支持更丰富的数据类型(String、List、Hash、Set、Sorted Set 等),能应对更复杂的场景;Memcached 仅支持简单的 key-value。
- 持久化:Redis 支持将数据持久化到磁盘,重启后可恢复;Memcached 数据仅存在于内存中。
- 灾难恢复:得益于持久化能力,Redis 具备灾难恢复机制。
- 内存管理:Redis 在内存用尽后,可以将不常用的数据交换到磁盘;Memcached 则会直接返回错误。
- 集群:Redis 原生支持 Cluster 模式;Memcached 需要依靠客户端实现分片。
- 线程模型:Memcached 采用多线程模型;Redis 使用单线程 IO 多路复用模型(网络读写在 6.0 版本引入了多线程)。
- 功能特性:Redis 支持发布订阅、Lua 脚本、事务等,功能更全面,支持的编程语言也更广泛。
- 删除策略: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 的核心概念。学习技术时,打好基础至关重要。如果你想深入探讨更多后端架构与分布式系统知识,欢迎来云栈社区交流分享。