【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

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

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


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

相关推荐
低客的黑调44 分钟前
了解JVM 结构和运行机制,从小白编程Java 大佬
java·linux·开发语言
想唱rap1 小时前
C++ map和set
linux·运维·服务器·开发语言·c++·算法
熊文豪1 小时前
17年稳定运行:金仓数据库如何成为电力行业的“数字基石“
数据库·kingbasees·金仓数据库·电科金仓·kes
r***11331 小时前
Redis--模糊查询--方法实例
数据库·redis·缓存
q***71011 小时前
SQL注入(SQL Injection)攻击原理与防御措施
数据库·sql·oracle
CodeByV1 小时前
【Linux】Ext 系列文件系统深度解析:从磁盘到软硬链接
linux·服务器
f***R81 小时前
解决bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException
java·数据库·sql
T***19201 小时前
实操解决Navicat连接postgresql时出现‘datlastsysoid does not exist‘报错的问题
数据库·postgresql
·云扬·1 小时前
Redis性能测试实战:掌握redis-benchmark工具用法与集群压测技巧
数据库·redis·缓存