Redis从入门到精通的第一步初识 Redis从入门到精通的第一步Redis 早已成为后端开发、运维领域不可或缺的必备技能无论是大型互联网企业的复杂架构还是中小型项目的核心模块缓存加速、高并发计数器、轻量消息队列、实时排行榜等高频场景几乎都离不开它的身影。这篇文章将带你系统入门 Redis全面梳理它的前世今生、核心特性、典型应用场景、版本选择逻辑与Linux环境下的安装启动方法帮你快速搭建Redis知识框架打好从入门到精通的坚实基础。一、为什么人人都爱 RedisRedis 是一款基于内存的高性能键值对Key-ValueNoSQL 数据库与传统的键值对数据库相比它的核心优势在于值的存储形式异常丰富——不仅支持字符串还包含哈希、列表、集合、有序集合、位图、地理信息定位GEO等多种数据结构就像一把功能全面的“瑞士军刀”能灵活应对后端开发中的各类复杂需求。1. Redis 的诞生Redis 的诞生源于一个实际的性能痛点2008 年意大利程序员 Salvatore Sanfilippo业内常称其为 Antirez在开发个人项目 LLOOGG 网站时需要一个高性能的队列组件来支撑网站的核心功能。最初他采用 MySQL 来实现队列但无论如何优化 SQL 语句、调整数据库配置都无法满足网站的性能需求再加上当时资源有限他便决定自研一款专用于该网站的轻量级高性能数据库这就是 Redis 的雏形。2009 年Antirez 将 Redis 1.0 版本的源码发布到 GitHub 上凭借其极致的性能和简洁的设计迅速在开源社区风靡最终成为全球最流行的 NoSQL 数据库之一。2. 大厂都在用Redis 的高性能和高可用性使其被全球众多重量级企业广泛采用成为后端架构中的核心组件国外Twitter 用它存储用户会话和消息缓存Instagram 用它处理图片相关的高频访问数据GitHub、Stack Overflow 则用它优化页面响应速度提升用户体验国内新浪微博是全球最大的 Redis 使用者其海量用户的实时互动数据、消息推送等功能均依赖 Redis 支撑此外阿里、腾讯、美团、小米、唯品会等互联网大厂也将 Redis 广泛应用于电商、社交、出行等各类业务场景。如今熟练使用与运维 Redis已经成为后端开发、运维人员的核心基础能力也是面试中的高频考察点。二、Redis 的 8 大核心特性Redis 能在众多 NoSQL 数据库中脱颖而出、长期占据主流地位核心源于它的硬实力。结合其设计理念和实际应用场景我们将其核心特性总结为 8 个关键点帮你快速掌握 Redis 的优势所在。1. 速度极快Redis 的读写性能堪称业界顶尖官方给出的基准测试数据显示其每秒读写 QPS查询率可轻松达到 10 万级别在实际生产环境中结合硬件优化甚至能达到更高水平。其速度快的核心原因主要有四点数据全内存存储Redis 将所有核心数据都存放于内存中而内存的访问响应时间仅约 100 纳秒远优于磁盘的毫秒级访问速度这是 Redis 实现高速读写的最核心基础C 语言开发Redis 底层采用 C 语言编写C 语言作为贴近操作系统底层的编程语言执行效率高、资源占用少能最大程度减少程序运行中的性能损耗单线程架构Redis 核心命令执行采用单线程模型有效避免了多线程场景下的线程切换、锁竞争等开销保证了命令执行的高效性需要注意的是Redis 6.0 版本引入了多线程机制但仅用于处理网络 IO 和协议解析核心命令的执行仍然保持单线程模式源码极致优化Antirez 对 Redis 源码进行了精打细磨代码简洁优雅、逻辑清晰避免了冗余操作进一步提升了程序的执行效率有业内人士评价 Redis 是少有的集性能与优雅于一身的开源项目。2. 丰富的数据结构Redis 的全称是 REmote Dictionary Server远程字典服务器其核心优势之一就是支持丰富的数据结构不仅能满足基础的存储需求还能应对各类复杂的业务场景。具体来说它支持 5 种核心数据结构以及在此基础上延伸出的扩展类型基础数据结构String字符串、Hash哈希、List列表、Set集合、ZSet有序集合这 5 种结构是 Redis 最核心的功能覆盖了绝大多数后端开发场景扩展数据结构在字符串基础上演变出的 Bitmaps位图、HyperLogLog基数统计以及 Redis 3.2 版本新增的 GEO地理信息定位、5.0 版本新增的 Stream流数据这些扩展结构能满足特殊场景需求比如 Bitmaps 用于用户签到、HyperLogLog 用于UV统计、GEO 用于 LBS 服务极大地拓展了 Redis 的应用范围。3. 功能强大除了丰富的数据结构Redis 还提供了众多实用的附加功能这些功能能进一步提升开发效率满足各类场景的个性化需求主要包括键过期功能支持为键设置过期时间TTL过期后自动删除这一功能是实现缓存自动淘汰、临时数据存储如短信验证码的核心发布订阅功能提供简单的发布订阅机制支持一个发布者向多个订阅者发送消息可用于实现轻量级消息队列、实时通知等功能Lua 脚本功能支持嵌入 Lua 脚本开发者可以通过 Lua 脚本自定义复合命令实现复杂的业务逻辑同时保证脚本执行的原子性事务、流水线功能支持简单的事务操作能保证一组命令的原子执行流水线Pipeline功能则允许客户端将一批命令一次性发送到 Redis 服务端减少网络传输次数大幅提升批量操作的效率。4. 简单稳定Redis 的设计理念之一就是“简单高效”同时具备极高的稳定性具体体现在四个方面源码简洁易懂Redis 早期版本的源码仅约 2 万行即使在 3.0 版本新增集群功能后源码量也仅增至 5 万行左右相比其他 NoSQL 数据库代码量少、逻辑清晰普通开发和运维人员经过学习后完全可以“吃透”源码理解其底层实现单线程模型简化开发单线程模型不仅让 Redis 服务端的处理逻辑变得简单也降低了客户端的开发难度无需考虑多线程并发带来的各种问题无第三方依赖Redis 不依赖操作系统中的任何第三方类库比如 Memcache 需要依赖 libevent 类库自身实现了事件处理、网络通信等核心功能部署和维护更加便捷稳定性极强经过多年的生产实践验证Redis 极少出现因自身 BUG 导致的服务宕机问题能为业务提供稳定可靠的支撑这也是大厂广泛采用它的重要原因之一。5. 多语言客户端Redis 提供了简单、通用的 TCP 通信协议这使得几乎所有主流编程语言都能轻松接入 Redis并且各大编程语言社区都维护了成熟的 Redis 客户端无需开发者自行封装通信逻辑。支持的主流编程语言包括 Java、Python、Go、C/C、PHP、Node.js 等无论你使用哪种开发语言都能快速实现与 Redis 的交互接入便捷且兼容性强。6. 数据持久化由于 Redis 的数据默认存储在内存中一旦发生断电、机器故障等意外情况内存中的数据会全部丢失这无疑会影响业务的稳定性。为了解决这一问题Redis 提供了**RDB快照持久化和 AOF日志持久化**两种机制可将内存中的数据定期或实时保存到硬盘中即使发生意外也能通过持久化文件恢复数据保证数据的安全性和可持久性。7. 主从复制Redis 支持一主多从的复制架构即一个主服务器Master可以对应多个从服务器Replica主服务器会将自身的数据同步到所有从服务器实现数据副本备份。主从复制不仅能提高数据的可用性主服务器故障时从服务器可作为备用还能分担主服务器的读写压力读请求可分发到从服务器是 Redis 分布式架构和高可用架构的基础。8. 高可用与分布式为了满足大规模业务的高可用和可扩展需求Redis 提供了两种核心方案完善了分布式架构的支撑能力哨兵SentinelRedis 官方提供的高可用解决方案能够实时监控 Redis 节点的运行状态当主服务器发生故障时自动发现故障并将某个从服务器切换为新的主服务器实现故障自动转移无需人工干预集群ClusterRedis 官方推出的分布式实现方案通过将数据分片存储在多个节点上实现了数据的分布式存储和负载均衡同时支持节点的动态扩容和缩容能满足大规模业务的容量和性能需求。三、Redis 能做什么典型应用场景虽然 Redis 功能强大但它并不是“万金油”有其适用的场景和边界。结合其核心特性来看Redis 在热数据、高并发场景下表现突出能发挥最大价值而在某些场景下则并不适用。✅ 推荐使用场景缓存这是 Redis 最核心、最广泛的用途。将数据库中的热数据频繁访问、变化较少的数据缓存到 Redis 中用户请求时先从 Redis 中获取无需每次都访问数据库既能大幅加速数据读写速度又能有效降低后端数据库的访问压力保护数据库的稳定性排行榜系统无论是网站的热度排行榜、商品销量排行榜还是用户积分排行榜都可以利用 Redis 的 List 或 ZSet 数据结构快速实现。ZSet 支持按分数排序能轻松实现实时排序和排名查询性能远超传统数据库计数器视频播放量、商品浏览数、文章阅读量、点赞数等高频计数场景非常适合用 Redis 实现。Redis 提供的 INCR、DECR 等命令支持原子性计数即使在高并发场景下也能保证计数的准确性且性能极高社交网络社交类网站中的点赞/踩、粉丝关注、共同好友、消息推送、下拉刷新等功能都可以利用 Redis 的 Hash、Set、List 等数据结构轻松实现。例如用 Set 存储用户的粉丝列表用 Hash 存储用户的个人信息能高效支撑社交场景的高频交互消息队列虽然 Redis 不是专业的消息队列如 RabbitMQ、Kafka但它提供的发布订阅功能和阻塞队列功能能满足基础的消息队列需求实现业务解耦和非实时业务的削峰填谷适合中小规模、对消息可靠性要求不极高的场景。❌ 不推荐场景超大规模冷数据Redis 的数据存储在内存中虽然当前内存成本已大幅降低但如果数据量极大如每天数亿条的用户行为冷数据使用 Redis 存储会产生极高的经济成本得不偿失非频繁访问数据对于访问频率极低的冷数据将其存储在 Redis 中会浪费宝贵的内存资源这类数据更适合存储在数据库或对象存储中按需读取即可。简单总结来说热数据用 Redis加速读写、降低压力冷数据用数据库节省成本、按需访问合理划分数据类型才能发挥 Redis 的最大价值。四、Redis 版本选择生产环境看这篇Redis 的版本迭代遵循 Linux 操作系统的版本命名规则版本号的第二位如果是偶数则为稳定版本如果是奇数则为开发版本。开发版本主要用于测试新功能稳定性无法保证因此生产环境优先选择偶数版本学习和测试则可根据需求选择合适的版本。重大版本演进Redis 自开源以来经历了多次版本迭代每个重大版本都带来了重要的功能更新和性能优化以下是核心版本的关键特性梳理2.62012 年正式发布是 Redis 发展史上的重要版本新增支持 Lua 脚本、毫秒级键过期、位图命令bitcount、bitop同时去掉了虚拟内存功能放开了客户端连接数的硬编码限制2.82013 年正式发布优化了主从复制功能减少了网络故障导致的全量复制开销尝试支持 IPv6新增 config rewrite 命令实现配置持久化同时 Redis Sentinel 升级为生产可用版本3.02015 年正式发布核心新增 Redis Cluster 官方分布式实现优化了 LRU 淘汰算法和小对象内存访问效率新增 client pause 命令支持键迁移速度优化3.22016 年正式发布新增 GEO 地理信息定位功能优化了 SDS简单动态字符串的性能和内存占用引入 QuickList 作为 List 结构的新编码同时支持用 systemd 管理 Redis 进程4.02017 年正式发布新增模块系统支持第三方扩展 Redis 功能引入 LFU 淘汰算法提供异步删除命令unlink支持 RDB-AOF 混合持久化优化了主从复制的 PSYNC 机制5.02018 年正式发布新增 Stream 流数据类型将集群管理器从 Ruby 移植到 C 语言新增 zpopmin/zpopmax 命令优化了内存统计和 Lua 脚本支持弃用“slave”术语改用“replica”6.02020 年正式发布核心引入多线程 IO仅处理网络和协议解析命令执行仍单线程支持客户端缓存、SSL 加密、ACL 权限控制发布官方 Redis Cluster Proxy 代理模块7.02022 年正式发布优化 AOF 存储方式多文件存储升级 RDB 版本至 10不兼容旧版本将 ziplist 转换为 listpack默认开启 protected-mode 保护模式提升了数据一致性和安全性。学习 / 生产建议学习推荐5.0 版本该版本已支持绝大多数核心功能包括 Stream 流数据、集群管理等安装配置简单稳定性强非常适合新手入门学习能快速掌握 Redis 的核心用法生产推荐7.0 版本作为最新的稳定版本它在性能、安全性、功能完整性上都有显著提升支持 AOF 多文件存储、更强的 ACL 权限控制等新特性能更好地满足生产环境的高可用、高安全需求。五、安装与启动Linux 环境一步到位需要特别注意的是Redis 官方不推荐在 Windows 操作系统上使用 Redis。因为 Redis 的许多核心特性如持久化、多线程 IO、信号处理等都与 Linux 操作系统深度绑定在 Windows 上运行会存在功能限制和性能损耗且官方不提供维护支持。而生产环境中几乎所有企业都采用 Linux 操作系统部署 Redis因此本文重点讲解 Linux 环境CentOS 8 和 Ubuntu 20下的 Redis 安装与启动。1. 核心文件说明Redis 安装完成后会生成一系列核心文件每个文件都有其特定的用途了解这些文件有助于后续的运维和调试redis-serverRedis 服务端程序用于启动 Redis 服务是 Redis 运行的核心redis-cliRedis 命令行客户端是学习和调试 Redis 的必备工具可通过它连接 Redis 服务、执行各类命令redis-sentinelRedis 哨兵程序用于实现 Redis 高可用监控节点状态并实现故障自动转移redis-benchmarkRedis 性能压测工具可用于测试 Redis 的读写性能生成基准测试报告redis-check-aof/rdb持久化文件修复工具当 AOF 或 RDB 文件损坏时可使用这两个工具进行修复恢复数据。2. 启动方式为了保证 Redis 服务的稳定运行和便捷管理推荐使用systemd 托管的方式启动 Redis这种方式能实现 Redis 服务的开机自启、状态监控、快速启停比直接执行命令启动更可靠# 启动 Redis 服务systemctl start redis# 停止 Redis 服务systemctl stop redis# 设置 Redis 开机自启systemctlenableredis# 查看 Redis 服务状态systemctl status redis3. 客户端连接Redis 默认监听 6379 端口安装完成并启动服务后可通过 redis-cli 客户端连接 Redis主要有两种使用方式适用于不同场景交互式推荐学习、调试场景通过 redis-cli 命令进入交互模式后续所有命令可直接输入执行无需重复输入 redis-cli操作便捷redis-cli# 连接成功后输入 ping 命令测试连接返回 PONG 表示连接正常127.0.0.1:6379pingPONG命令式推荐脚本、批量操作场景直接在终端输入 redis-cli 加上具体命令执行后直接返回结果无需进入交互模式# 设置键值对keyhellovalueworldredis-clisetkey hello# 获取键 key 对应的值redis-cli get key4. 核心配置文件Redis 的配置文件用于控制 Redis 服务的运行参数如端口、密码、持久化方式、内存限制等核心配置文件及存储目录如下后续优化 Redis 性能、配置高可用时需要频繁修改这些文件/etc/redis.confRedis 服务端的核心配置文件包含所有 Redis 运行相关的配置参数/var/lib/redis/Redis 持久化文件RDB 和 AOF的默认存储目录后续学习持久化时可在此目录下查看生成的持久化文件/var/log/redis/Redis 日志文件的存储目录日志文件默认按天分割会记录 Redis 的运行状态、错误信息等用于问题排查和运维监控。六、本章核心总结通过本章的学习我们已经掌握了 Redis 的核心基础内容这里用 5 个关键点总结帮助你快速回顾和记忆Redis 是一款基于内存的高性能键值对 NoSQL 数据库核心优势是快、稳、功能全是后端开发、运维领域的必备技能Redis 的 8 大核心特性高速读写、丰富的数据结构、强大的附加功能、简单稳定、多语言客户端支持、数据持久化、主从复制、高可用与分布式应用场景核心适用于缓存、排行榜、计数器、社交网络、轻量消息队列核心原则是只存热数据避免浪费内存资源版本选择生产环境优先选择偶数稳定版学习推荐 5.0 版本生产推荐 7.0 版本安装与启动优先在 Linux 环境部署使用 systemd 托管方式启动通过 redis-cli 客户端进行操作核心配置文件和持久化文件有固定存储目录。