Redis 7.x 系列【1】产品介绍

有道无术,术尚可求,有术无道,止于术。

本系列Redis 版本 7.2.5

源码地址:https://gitee.com/pearl-organization/study-redis-demo

1. 简介

Redis的全称为Remote Dictionary Server ,即远程字典服务。使用ANSI C语言编写,是一个开源、基于内存、可持久化、分布式、高性能的Key-Value数据结构服务器,并提供了多种语言的API

相关文档:

一句话概述:Redis是一个K-V键值对内存数据库。

2. Redis 之父

Redis作者是Salvatore Sanfilippo,网名为Anirez,一般称为安特雷兹

1977年出生于意大利的西西里岛,电影 《西西里的美丽传说》 …女神莫尼卡·贝鲁奇🥰🥰🥰

Anirez进入IT行业时,是一个系统安全管理员,干着运维的活。但是业余时间自学编程,并发明了不少技术工具。在2007年创办LLOOGG.com访客信息追踪网站。为了节省成本以及高性能扩展性,Antirez意识到需要一种支持多种复杂数据结构的内存数据库,并且支持快速操作,于是便在2009年开源并发布了Redis

之后Anirez就职于Pivotal,主导Redis的开发的维护工作。在2020年,Anirez个人博客发布了将隐退的消息,退出代码的日常开发维护,以后只充项目顾问(在我看来,大佬已经财富自由、功成身退,实名羡慕…):
在这里插入图片描述
在这里插入图片描述

3. 功能

Redis提供了丰富的数据结构

  • String:字符串
  • Hash:哈希表
  • List:列表
  • Set:集合
  • SortedSet:有序集合
  • Bitmaps:位图
  • Bitfiled:位域
  • Hyperloglog :基数统计
  • Geospatial:地理信息
  • Stream:流

此外还包括以下主要功能:

  • 过期自动删除Key
  • 事务
  • 发布订阅
  • LUA脚本
  • 内存回收
  • 持久化
  • 自动故障转移
  • 主从、哨兵、集群等高可用部署模式

4. 版本

Redis偶数版本号表示稳定的版本,例如6.27.07.2,奇数版本号用来表示非标准版本,例如2.95.1

Redis发展史简图:
在这里插入图片描述
Redis到目前为止,已经很成熟了,后续几个版本主要是优化,大版本发布时间表及核心特性如下:

  • 20093月发布Redis 1.0 版本,基于内存存储数据,并引入了一些基本的数据结构和操作命令,支持RDB(快照)持久化机制。基本版本为以后的发展奠定了基础。
  • 20104月发布 Redis 2.0 版本,引入虚拟内存,实现 Lua 脚本语言,支持哈希类型,提供慢查询日志。除了新增的功能外大幅提升了性能和稳定性。
  • 20115月发布 Redis 2.2 版本,引入有序集合(SortedSet),支持Lua 脚本,并新增对应的操作命令。支持大数值的整型、增加了对 IPv6 的支持,并支持强化调试。
  • 20119月发布 Redis 2.4 版本,引入了主从复制、发布订阅、提供管道和事务支持等新特性。此外对性能、稳定性和错误处理能力等方面进行了大幅优化和改进。
  • 20128月发布 Redis 2.6 版本,引入了虚拟内存、AOF持久化、到期键(EXPIRE)等新特性。此外还引入了内存优化机制,可靠性和稳定性大幅提升。
  • 20144月发布 Redis 2.8 版本,增强的 Lua 脚本支持,支持优化增量重写,引入哨兵模式,支持高可用性和自动故障转移。性能、可扩展性、容错性和灵活性等方面都有很大提升,
  • 20155月发布 Redis 3.0 版本,引入了多条新命令, Redis Cluster集群模式,支持GEOHyperLogLog 数据类型。针对持久化机制、Lua 脚本、配置方面都进行了增强。
  • 20168月发布 Redis 3.2 版本,引入了对 Redis 集群的完整支持,支持高可用性、数据复制和分片。支持Stream流,此外包含了其他许多方面的稳定性提升。
  • 20179月发布 Redis 4.0 版本,更加强大和高效的集群功能、更加安全和可靠的持久化机制、新的数据类型、事务和流水线批处理等功能。
  • 201810月发布 Redis 5.0 版本,更加强大和高效的模块化架构,更加安全和可靠的持久化机制、新的数据类型、多种集群模式、新增命令等等。
  • 20204月发布 Redis 6.0 版本,针对集群、性能、内存管理、可伸缩性、安全性新方面进行了大幅优化提升。
  • 20224月发布 Redis 7.0 版本(下文会详细介绍)。

5. Redis 7 新特性

2022427 日,Redis 7.0.0 GA 版于正式发布,新增了50多个新命令,包含了大量核心新特性与改进,是改变最多的一个大版本。接下来主要介绍一些比较重要的新特性。

5.1 Redis Functions

Redis 2.x开始支持Lua脚本,但是存在一定的局限性,比如Lua脚本存储在客户端,重启时需要重新加载加载,增加了维护成本;脚本可以被缓存,但是会存在丢失问题。

Redis 7引入了Redis Functions(函数),是一种全新的脚本方案。通过持久化和复制保证可用性,不依赖于客户端,允许通过服务端加载自定义的函数库,并且会进行主从复制和持久化存储。支持多种语言,目前仅支持LUA,后续计划支持JavaScriptPython等。

5.2 Multi-part AOF

AOFAppend Only File)是Redis数据持久化方案之一,以日志的形式来记录每个写操作,重启时会读取该文件重新构建数据。在之前的AOF机制中,在数据重写期间的增量数据需要在内存中保留,结束后再把这部分增量数据写入新的AOF文件中,以保证数据完整性。这种方式会会额外消耗内存和磁盘IO

Redis 7引入了Multi-part AOF机制来解决上述问题,采用两种类型的文件进行独立存储:

  • base files:基本文件
  • incr files:增量文件

采用多个文件进行分类存储,彻底解决内存和IO资源的浪费,同时也支持对历史AOF文件的保存管理。

5.3 ACL V2

6.0版本之前,Redis只有一种简单的密码机制,甚至没有用户名。Redis 6.0引入了ACL访问控制列表机制,允许创建用户并分配权限,但是权限粒度较粗,实用性并不强。

Redis 7引入了ACL v2,支持KEY 粒度的权限访问控制。

5.4 Client Eviction

为了防止Redis占用过多的内存,支持以下配置:

  • maxmemory:允许占用的最大内存值
  • maxmemory-policy:占用超过最大值时的内存淘汰策略

maxmemory控制的是整个Redis运行内存,包括数据、客户端、脚本等,其中非数据内存client buffer消耗最大,在大流量场景下,可以因为client buffer消耗太多内存,导致触发淘汰策略删除数据,实际应该针对client buffer进行单独配置。

Redis 7引入了专门针对客户端内存占用的限制:

# 方式1:允许客户端占用最大内存
maxmemory-clients 1g
# 方式2:允许客户端占用 maxmemory 的百分比
maxmemory-clients 10%

5.5 Sharded Pub/Sub

Redis 2.x开始支持发布订阅,但是在大规模集群中存在广播风暴问题。Redis 7引入了Sharded-pubsub机制,一个分片节点只负责处理属于自己的通道而不会进行广播,避免了资源的浪费。

5.6 其他

其他的一些特性包括:

  • config命令增强,支持在一次调用过程中传递多个配置参数。
  • listpack替代ziplist
  • RDB保存时间调整
  • 主动碎片整理V2
  • 性能资源利用率、安全、等改进

5.7 Redis 7.2

2022年发布Redis 7距今已经两年了,目前最新的版本为7.2.5,主要是在7.0的版本上进行了漏洞修复、BUG优化、底层优化等:
在这里插入图片描述

6. 应用场景

Redis诞生于Web 2.0时代,应用场景十分广泛,包括:

  • 缓存加速:最经典的应用场景之一,将热点查询数据存入到Redis,减少数据库压力
  • 分布式锁:分布式场景下的锁
  • 计数器:计数器功能,例如文章的阅读量、微博点赞数等,允许一定的延迟后同步到数据库
  • 分布式会话:使用Redis存储Session
  • 分布式ID:分库分表的场景中,实现全局唯一ID
  • 定时失效:短信、验证码过期

7. 扩展模块

基于核心的 Redis ,官方也提供了很多扩展模块,以适应更多的开发场景:

  • RediSearch:基于 Redis 的全文搜索引擎。提供了高性能的全文搜索功能,支持复杂的查询和过滤,并且可以无缝地集成到现有的Redis环境中。
  • RedisJSON:用于在 Redis 中存储和操作 JSON 数据的模块。它提供了高效的 JSON 序列化和查询功能,使得在 Redis 中处理 JSON 数据变得更加简单和高效。
  • RedisInsight:用于管理和监控 Redis 实例的可视化工具。它提供了直观的界面,可以轻松地查看和分析 Redis的数据、内存使用和性能指标。
  • RedisGraph:基于 Redis 的图数据库扩展,它使用图结构来存储和查询数据,提供了快速的图遍历和图分析功能。它适用于处理复杂的关联数据和图数据分析任务,可以轻松地进行路径查找、社交网络分析等操作。
  • RedisBloom:在 Redis 上实现的布隆过滤器和其他数据结构的扩展,可以提供高效的元素查找和去重功能,适用于大规模数据集的快速筛选和过滤,具有较低的误判率和高效的存储利用率。
  • RedisTimeSeries:在 Redis 上实现的的时间序列数据库扩展,它提供了高性能的时间序列数据存储和查询功能。它能够处理大规模的时间序列数据,支持聚合查询、降采样和数据压缩等功能,是构建实时分析和监控系统的理想选择。
  • RedisOM:目标是为使用 Redis 生态提供多语言/跨平台的高级抽象客户端。它提供了简化 Redis 操作的功能,使得在 Spring 应用中使用 Redis 变得更加便捷。目前已支持多种语言像NodePython.netSpring等。

8. Redis Stack

官方介绍

20223月发布了 Redis Stack ,将多个领先的 Redis 模块集成为单个产品, 使得用户可以更轻松地利用基于 Redis 构建的搜索、文档存储、图数据和时间序列能力。Redis 是核心的开源技术, Redis Stack 并不是 Redis 的替代品。是为了开发者能够快速、轻松地开发完全基于 Redis 的现代应用。

Redis Stack 是由一下三个组件组成的集成套件:

  • 服务器:将开源的 RedisRedisSearchRedisJSONRedisGraphRedisTimeSeriesRedisBloom 进行整合。
  • 可视化管理工具:RedisInsight 是一个强大的工具,用于可视化和优化 Redis 数据,使实时应用开发比以前更容易、更有趣。
  • 客户端 SDK :包含 JavaJavaScript 和 Python 官方客户端以及新推出的对象映射库套件 Redis OM

在这里插入图片描述

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-06-14 20:56:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-14 20:56:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-14 20:56:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-14 20:56:02       18 阅读

热门阅读

  1. 深入浅出MyBatis:全面解析与实战指南

    2024-06-14 20:56:02       8 阅读
  2. 二维码扫描,没有生成,生成比较复杂

    2024-06-14 20:56:02       6 阅读
  3. 43、Flink 自定义窗口触发器代码示例

    2024-06-14 20:56:02       8 阅读
  4. 针对oracle系列数据库慢数据量大的问题

    2024-06-14 20:56:02       8 阅读
  5. git本地配置及IDEA下Git合并部分文件

    2024-06-14 20:56:02       8 阅读
  6. Spring Boot 3 整合 Redisson 实现分布式锁

    2024-06-14 20:56:02       8 阅读
  7. gitlab克隆本地切换p分支

    2024-06-14 20:56:02       8 阅读
  8. Webrtc支持FFMPEG硬解码之Intel(一)

    2024-06-14 20:56:02       7 阅读
  9. 前端开发中的热更新原理

    2024-06-14 20:56:02       9 阅读
  10. Linux/Ubuntu/Debian常用服务管理命令

    2024-06-14 20:56:02       9 阅读
  11. 【Spring Boot实现网页会话(Session )】

    2024-06-14 20:56:02       8 阅读