【Redis 系列】Redis详解

🚀 欢迎来到我的CSDN博客:Optimistic _ chen

一名热爱技术与分享的全栈开发者,在这里记录成长,专注分享编程技术与实战经验,助力你的技术成长之路,与你共同进步!


🚀我的专栏推荐

专栏 内容特色 适合人群
🔥C语言从入门到精通 系统讲解基础语法、指针、内存管理、项目实战 零基础新手、考研党、复习
🔥Java基础语法 系统解释了基础语法、类与对象、继承 Java初学者
🔥Java核心技术 面向对象、集合框架、多线程、网络编程、新特性解析 有一定语法基础的开发者
🔥Java EE 进阶实战 Servlet、JSP、SpringBoot、MyBatis、项目案例拆解 想快速入门Java Web开发的同学
🔥Java数据结构与算法 图解数据结构、LeetCode刷题解析、大厂面试算法题 面试备战、算法爱好者、计算机专业学生

🚀我的承诺:

✅ 文章配套代码:每篇技术文章都提供完整的可运行代码示例

✅ 持续更新:专栏内容定期更新,紧跟技术趋势

✅ 答疑交流:欢迎在文章评论区留言讨论,我会及时回复(支持互粉)


🚀 关注我,解锁更多技术干货!
⏳ 每天进步一点点,未来惊艳所有人!✍️ 持续更新中,记得⭐收藏关注⭐不迷路 ✨

📌 标签:#技术博客#编程学习#Java#C语言#算法#程序员

文章目录

Redis特性

Redis性能

官网介绍:

  从Redis官网的介绍可以看出,redis可以当作数据库来使用。那么它相比较于MySQL,有什么优势?或者说,弊端在哪里。

方面 Redis RedisMySQL
类型 内存存储键值对(数据结构服务器) 关系型数据库管理系统
读写速度 极快(内存操作) 相对较慢(磁盘IO)
并发能力 极强 较强
数据持久化 可选且异步 强制且同步

总的来说:

  • redis速度极快、高并发、数据结构丰富、扩展简便;但是数据易失(有丢失风险)、不支持复杂查询、内存成本高
  • MySQL数据一致性和安全性高、生态成熟;但是扩展复杂、对简单数据结构不友好。

现代应用中,我们希望既要MySQL的 "大" 又要redis的 "快",二者协同工作,最常用的就是redis作为MySQL的缓存层。

  根据具体需求来判断如何使用分配二者的权重,记住一点:Redis 是为了性能而生的缓存和高速数据处理器,MySQL 是为了可靠而生的核心数据保险库。

Redis结构

  几乎所有的高级语言提供了类似字典的功能,Java中的Map :一种基于键值对的数据结构的数据组织方式。而Redis也采用了键值对结构,它是基于键值对的数据结构服务器。但是Redis中的值不仅可以是字符串,也可以是其他具体的数据结构。

  Redis的全称是REmote Dictionary Server(远程字典服务),本质上和数据库很类似,它主要提供五种数据结构:

  • 字符串(String)
  • 哈希(Hash)
  • 列表(list)
  • 集合(set)
  • 有序集合(orderer set/zet)

相信只要学习过数据结构的程序员,对Redis的学习是非常高效的。

Redis功能

这里只是简单介绍一下具体有什么功能,其如何实现放在后面博客中详细解释,敬请期待。

  1. 提供键过期功能,可以用来实现缓存
  2. 提供了发布订阅功能,可以用来实现消息系统
  3. 提供Lua脚本功能,可以利用Lua创造出新的Redis命令
  4. 提供了简单的事务功能,能一定程度上保证事务特性
  5. 提供了流水线功能,这样客户端就能将一批命令一次性传递到Redis,减少网络开销。

Redis巨大优势

简单稳定

Redis简单体现在三个方面:

  • Redis源码很少,只有2w行左右,3.0版本后由于增加了集群功能,代码增至5w行左右,虽然看起来数字很大,但是程序员完全可以吃透。
  • Redis使用单线程模型,不仅使Redis服务端处理模型变得简单,也使客户端开发变得简单。
  • Redis不需要依赖操作系统中的库,Redis自己实现了事件处理的相关功能。
  • 因为Redis相对的简单,所以它具有相当的稳定性,大量的数据很少使Redis崩掉。

客户端语言多

  众所周知,网络传输需要通过各种协议,Redis 提供了简单的TCP通信协议,很多编程语言可以很方便的接入到Redis。后期博客我会着重介绍对Redis的客⼾端使⽤。

持久化

  一般情况下,数据存放在硬盘中是比较安全的,一旦发生断电或者死机等突发情况,保障数据不会丢失,所以内存中很少存放数据。但是内存的访问效率高,为了不浪费这个高效率,Redis提供了两种持久化方式:

  • RDB:采用定时快照方式,将某一时刻的内存数据以二进制格式写入磁盘。它文件紧凑、恢复速度快,适合备份与灾难恢复,但可能丢失最后一次快照后的数据。
  • AOF:记录每次写操作命令,以日志形式追加到文件末尾,重启时通过重放命令恢复数据,数据安全性更高,可配置 appendfsync 策略,但文件体积大、恢复速度较慢。

主从复制

Redis 提供了复制功能,实现了多个相同数据的Redis副本(Replica)复制功能是分布式Redis的基础。

高可用和分布式

  Redis 提供了⾼可⽤实现的Redis哨兵(Redis Sentinel),能够保证Redis结点的故障发现和故障⾃动转移。也提供了Redis集群(Redis Cluster),是真正的分布式实现,提供了⾼可⽤、读写和容量的扩展性

Redis应用

站在数据冷热的⻆度,数据分为热数据和冷数据,热数据通常是指需要频繁操作的数据,反之为冷数据。

  单纯站在数据冷热的⻆度上看,视频信息属于热数据,⽤⼾观看记录属于冷数据。如果将这些冷数据放在Redis上,基本上是对于内存的⼀种浪费,但是对于⼀些热数据可以放在Redis中加速读写,也可以减轻后端存储的负载,可以说是事半功倍

缓存(Cache)

  几乎所有大型网站都会采用缓存机制 。合理运用缓存不仅能显著提升数据访问速度,还能有效减轻后端数据源的压力。Redis不仅支持键值过期时间设置,还提供了灵活的内存管理功能,包括最大内存限制和内存溢出时的淘汰策略。可以说,科学的缓存设计是确保网站稳定运行的重要保障。

排行榜系统

  排行榜系统 几乎运用在所有大型网站,各种排行榜:按照时间排名,按照价格排名,按照各种维度计算出的排行榜等等。,Redis提供了列表和有序集合的结构,合理地使⽤这些数据结构可以很⽅便地构建各种排⾏榜系统。

计数器系统

  计数器在网站中至关重要,视频播放数,博文点赞数,文章浏览数等等,并且为了保证数据的实时性,每一次浏览都要进行+1操作,如果数据量很大,对于传统的关系型数据库性挑战很大。而Redis天然支持计数功能并且技术性能非常好,是计数器系统的重要选择。

消息队列系统

  消息队列系统是大型网站不可或缺的核心组件,它能有效实现业务解耦和流量削峰 。虽然Redis的发布订阅和阻塞队列功能相比专业消息队列稍显简单,但完全能够满足常规的消息队列需求。

Redis版本

  Redis 借鉴了Linux操作系统对于版本号的命名规则:版本号第⼆位如果是奇数,则为⾮稳定版本(2.7),如果是偶数,则为稳定版本(2.6)

Redis 1.0(2009)

  • 标志性事件:初始版本发布,Redis诞生
  • 核心特性:支持简单的键值对存储
         基于内存、持久化到硬盘
         简单的主从复制

Redis 2.6 (2012)

核心特性:

  • Lua脚本:内置Lua脚本引擎,支持原子性的复杂操作,减少网络开销
  • 从站只读:明确将从库设置为只读模式,避免误操作
  • 超时命令:对BLPOPBEPOP等阻塞命令添加了超时参数
  • 新的PTTL命令,返回键的剩余过期时间

Redis 2.8(2013)

核心特性:

  • Sentinel 哨兵机制:实现了可高用性解决方案,可以自动进行故障检测和故障转移
  • 部分重同步:在复制中断后,只需同步中断期间确实的数据,而不是全量同步,极大提升了复制的效率。
  • 键空间通知的增强
  • SCAN系列命令:提供了基于游标的迭代器 ,可以安全的遍历数据库中的键,替代了会阻塞服务的 KEYS 命令。

Redis 3.0(2015)

核心特性:

  • Redis Cluster集群:最重要的特征之一。实现了分布式、分片式的Redis解决方案,支持数据自动在多个节点间分片,并提供了一定程度的可用性。
  • 全新的Redis-benchmark压力测试工具。
  • 对Lua脚本的改进,支持了更细颗粒度的复制。

Redis 3.2(2016)

核心特性:

  • GEO地理空间索引:新增一系列GEO命令,可以存储和查询地理位置信息,支持计算距离、范围内搜索。
  • 字符串类型优化:引入了字符串编码优化,对短字符串的内存使用更加高效
  • Lua脚本调试功能
  • 新增BITFIELD命令,用于对位图进行原子性操作

Redis 4.0(2017)

核心特性:

  • Modules 模块系统:允许用户动态加载自定义模块来扩展Redis功能,这是 Redis 走向可扩展性的关键一步。
  • PSYNC2:优化了故障转移后的部分重同步机制
  • LFU缓存淘汰策略:新增了基于访问频率的淘汰算法,更加智能
  • 异步删除:UNLINKFLUSHALL ASYNC 等命令可以非阻塞地删除大量键,避免服务停顿
  • 混合RDB+AOF持久化:结合了 RDB 的快照优势和 AOF 的实时性优势

Redis 5.0(2018)

核心特性:

  • Stream数据类型:新增了一个强大的、支持多播的持久化消息队列数据结构,是 Redis 作为消息中间件角色的重要完善。
  • Redis Cluster 代理:为集群模式提供了中心化的代理支持
  • 新的排序命令 SORT_RO(只读排序)
  • RDB文件格式升级:增加了存储效率。
  • 弃用了旧版的 redis-benchmark 等命令,推荐使用redis-cli的新参数

Redis 6.0(2020)

核心特性:

  • 多线程I/O:首次引入了多线程,用于处理网络I/O和命令解析,但命令本身还是单线程
  • ACL访问控制列表:提供了更精细化的权限控制,可以为不同客户端设置不同的用户名、密码、命令权限
  • SSL/TLS加密支持:增强了客户端和服务端通信安全性
  • 客户端缓存:支持了服务器辅助的客户端缓存功能(Client-side Caching),进一步降低延迟
  • RESP3协议:新的Redis序列化协议,为客户端提供了更丰富的数据类型

Redis 7.0(2022)

核心特性:

  • Redis Functions:使用Lua编写的函数,可以被持久化并在集群中自动复制,是取代脚本的更优解决方案
  • 多部分AOF持久化:将AOF文件拆分为基础文件和一个或者多个增量文件,使得重写更安全、更高效
  • Sharded Pub/Sub:为集群模式下的发布/订阅功能提供了分片支持
  • ACL规则的细颗粒度化:支持基于键模式的权限管理

Redis 7.2(2023)

核心特性:

  • 原生支持向量相似度搜索:通过FT.SEARCH命令和HNSW索引,无需额外模块即可进行向量相似度计算,是迈向 AI 时代的关键特性。
  • TriggersFunctions 的增强
  • 新增ZINTER ZUNION ZDIFF命令,用于直接存储复杂集合操作的结果
  • 更多的命令支持NX/XX 选项

从演进趋势可以看出,Redis 从一个简单的内存键值存储,逐步发展成为一个功能丰富、高可用、可扩展、安全且面向现代应用(如实时消息、AI向量搜索)的数据平台。
其核心演进方向是:性能、稳定性、分布式能力、安全性和功能扩展性。

完结撒花!🎉

如果这篇博客对你有帮助,不妨点个赞支持一下吧!👍
你的鼓励是我创作的最大动力~

想获取更多干货? 欢迎关注我的专栏 → optimistic_chen

📌 收藏本文,下次需要时不迷路!

我们下期再见!💫 持续更新中......


悄悄说:点击主页有更多精彩内容哦~ 😊

相关推荐
oradh1 小时前
Oracle XTTS实现跨版本迁移和升级(Oracle 11g单库升级至19C RAC集群)
数据库·oracle·11g升级19c·xtts跨版本迁移和升级
z123456789862 小时前
2026最新两款AI编程工具深度对比实测
java·数据库·ai编程
程序猿DD2 小时前
一个 API Key,统一调用大模型、生图和联网搜索
数据库·网关
groundhappy3 小时前
idalib安装和codex ida-mcp配置
linux·开发语言·python
TlSfoward3 小时前
抓包代理链路下的 TLS 指纹变化分析 TLSFOWARD抓包工具
数据库·爬虫·网络协议·搜索引擎·php
数智化管理手记3 小时前
账龄分析手工统计易遗漏?自动账龄分析工具怎么搭建
大数据·网络·数据库·人工智能·数据挖掘
通信小小昕3 小时前
Ubuntu 26.04 中文输入法安装
linux·运维·ubuntu
LabVIEW开发4 小时前
NI Package Manager安装LabVIEW时InternalServerError错误
网络·数据库·labview·labview知识·labview功能·labview程序
SelectDB4 小时前
PostgreSQL 实时同步到 Apache Doris:一站式 CDC 解决方案
数据库
欲速不达88204 小时前
Mysql并发DML锁等待的优化
数据库·mysql