Redis Stack是什么,你知道吗?

简介: Redis Stack 是 Redis 官方推出的一款新产品,扩展了 Redis OSS 的核心功能,提供完整的开发人员体验。它支持概率数据结构、可查询的 JSON 文档、跨哈希和 JSON 文档查询、时间序列数据处理等高级功能。Redis Stack 包含 Redis Stack Server、RedisInsight 和客户端 SDK,适用于构建实时应用程序。安装方式包括直接安装和 Docker 安装,使用方法与 Redis 类似,支持 JSON、Bloom Filter 等数据类型及操作命令。

添加图片注释,不超过 140 字(可选)


Redis官网推出了一款新产品Redis Stack,那么什么是Redis Stack呢,今天我们来看一看。

一、什么是Redis Stack?

Redis Stack 是使用 Redis 的最佳起点。我们将我们必须提供的最好的技术捆绑在一起,形成一个易于使用的软件包。Redis Stack 扩展了 Redis OSS 的核心功能,并为调试等提供了完整的开发人员体验。

除了Redis OSS的所有功能之外,Redis Stack还支持:

  • Probabilistic data structures
  • Queryable JSON documents
  • Querying across hashes and JSON documents
  • Time series data support (ingestion & querying), including full-text search

可以看到Redis 是我们非常熟悉的内存键值对数据库,它有着丰富的数据结构,能够满足我们平时的绝大部分数据存储要求。然而,有些时候我们还希望可以对搜索,文档,图形,时间序列等进行数据建模,这个时候我们就可以使用 Redis Stack。

  • Redis Stack是Redis的扩展,它添加了现代数据模型和处理引擎,以提供完整的开发人员体验。
  • Redis Stack 是一组软件套件,它主要由三部分组成。一个是 Redis Stack Server,一个是 RedisInsight,一个是 Redis Stack 客户端 SDK。其中 Redis Stack Server 由 Redis,RedisSearch,RedisJSON,RedisGraph,RedisTimeSeries 和 RedisBloom 组成。
  • Redis和Redis Stack 的区别在于Redis 更加通用,而Redis Stack更加专注于构建实时应用程序。需要注意的是,Redis Stack并不是 Redis 的替代品,它们将会一同发展。当您准备好运行 Redis Stack时,您可以使用 Redis 复制机制或通过加载您的 RDB 或 AOF 文件来轻松迁移数据。

二、为什么选择 Redis 堆栈?

Redis Stack 的创建是为了让开发人员能够使用后端数据平台构建实时应用程序,该平台可以在几毫秒或更短的时间内可靠地处理请求。Redis Stack 以原始 Redis OSS 为核心,并通过现代数据模型、数据处理工具对其进行增强,并不断对抗复杂性来做到这一点。最终,Redis Stack 的目标是构建一个实时数据平台,继续履行 Redis OSS 的理念:简单、性能和可靠性。

Redis Stack 通过提供领先的 Redis 功能提供的所有尖端功能,统一并简化了 Redis 的开发人员体验。Redis Stack绑定了五个Redis模块:RedisJSON、RedisSearch、RedisGraph、RedisTimeSeries和RedisBloom。

总体愿景是为开发人员提供适用于所有实时数据用例的强大平台。随着我们继续推进 Redis 缓存以外的功能,Redis Stack 是我们的起点。Redis Stack 提供了开发人员喜爱的 Redis 核心功能,并进一步帮助您构建性能至关重要的现代应用程序。

三、Redis Stack安装与使用

3.1、安装

直接安装

sudo apt install lsb-release curl gpg curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg sudo chmod 644 /usr/share/keyrings/redis-archive-keyring.gpg echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list sudo apt-get update sudo apt-get install redis-stack-server

Docker安装

  • redis/redis-stack-server

要使用redis-stack-server镜像启动Redis Stack服务器,请在终端中运行以下命令:

docker run -d --name redis-stack-server -p 6379:6379 redis/redis-stack-server:latest

  • Redis/Redis-stack

要使用redis-stack镜像启动Redis Stack容器,请在终端中运行以下命令:

docker run -d --name redis-stack -p 6379:6379 -p 8001:8001 redis/redis-stack:latest

上面的docker run命令也会在端口8001上暴露RedisInsight。您可以通过将浏览器指向localhost:8001来使用RedisInsight。

3.2、使用

远程连接的方式与Redis是一样的,端口还是6379。当然如果你安装了redis-stack中自带了RedisInsight的话,就可以通过将浏览器指向localhost:8001来使用RedisInsight。

四、Redis Stack数据类型

4.1、JSON

Redis JSON 模块提供了一些用于处理 JSON 数据的命令。以下是一些常见的 Redis JSON 命令、语法和示例:

JSON.SET

JSON.SET 用于设置指定键的 JSON 值。

语法:

JSON.SET key path value [NX | XX]

  • key: Redis 键。
  • path: JSON 路径,表示 JSON 文档中的位置。
  • value: 要设置的 JSON 值。
  • NX | XX: 用于指定行为,类似于 SET 命令中的 NX 和 XX 选项。

示例:

JSON.SET user:2 $ '{"name": "John", "age": 30, "city": "New York"}'

请注意命令如何包含美元符号字符$。这是JSON 文档中值的路径(在本例中它仅表示根)。

JSON.GET

JSON.GET 用于获取指定键的 JSON 值。

语法:

JSON.GET key [path]

  • key: Redis 键。
  • path: JSON 路径,可选,表示 JSON 文档中的位置。

示例:

> JSON.GET user:2 $.name "[\"John\"]"

JSON.DEL

JSON.DEL 用于删除指定键的 JSON 值。

语法:

JSON.DEL key [path]

  • key: Redis 键。
  • path: JSON 路径,可选,表示 JSON 文档中的位置。

示例:

#删除前 > JSON.GET user:2 "{\"name\":\"John\",\"age\":30,\"city\":\"New York\"}" #执行删除命令 > JSON.DEL user:2 $.city #删除后 > JSON.GET user:2 $  "[{\"name\":\"John\",\"age\":30}]"

4.2、Bloom filter

RedisBloom 是 Redis 的一个模块,提供了布隆过滤器(Bloom Filter)等数据结构的支持。布隆过滤器是一种用于判断一个元素是否可能属于一个集合的数据结构,它允许有一定的误判率,但能够高效地进行元素的查询。

以下是 RedisBloom 模块中与布隆过滤器相关的命令的介绍:

BF.RESERVE

BF.RESERVE 用于创建一个新的布隆过滤器或更新现有布隆过滤器的参数。

语法:

BF.RESERVE key error_rate initial_size [EXPANSION expansion]

  • key: 布隆过滤器的键。
  • error_rate: 允许的误判率(false positive rate),即查询结果可能错误的概率。
  • initial_size: 初始大小,即布隆过滤器的预期最大元素数量。
  • EXPANSION expansion: (可选)扩展参数,用于设置布隆过滤器的动态扩展。

示例:

BF.RESERVE myfilter 0.1 1000

BF.ADD

BF.ADD 用于向布隆过滤器添加一个元素。

语法:

BF.ADD key element [element ...]

  • key: 布隆过滤器的键。
  • element: 要添加到布隆过滤器的元素。

示例:

BF.ADD myfilter user123

BF.EXISTS

BF.EXISTS 用于检查布隆过滤器中是否存在指定的元素。

语法:

BF.EXISTS key element

  • key: 布隆过滤器的键。
  • element: 要检查的元素。

示例:

BF.EXISTS myfilter user123

这个命令返回一个布尔值,指示查询的元素是否可能存在于布隆过滤器中。请注意,由于布隆过滤器的特性,存在误判率,即可能存在一定的 false positive。


添加图片注释,不超过 140 字(可选)


4.3、Cuckoo filter

Cuckoo 过滤器与 Bloom 过滤器一样,是 Redis Stack 中的一种概率数据结构,使您能够以非常快速且节省空间的方式检查集合中是否存在某个元素。

  • 布隆过滤器通常会表现出更好的性能和可扩展性。
  • Cuckoo 过滤器的检查操作速度更快,并且还允许删除。

在 RedisBloom 模块中,没有专门的 BF.DEL 命令用于删除布隆过滤器或 Cuckoo 过滤器。删除操作通常是通过使用 Redis 的通用 DEL 命令来完成的,该命令用于删除存储在 Redis 中的任何键,包括布隆过滤器或 Cuckoo 过滤器的键。

CF.DEL 命令:

语法:

CF.DEL key  element [element ...]

  • key: 要删除的键的名称。

示例:

CF.DEL myfilter user123

其它命令与布隆过滤器命令类似把BF改成CF就可以。

#RESERVE没有容错率 > CF.RESERVE bikes:models 1000000 OK > CF.ADD bikes:models "Smoky Mountain Striker" (integer) 1 > CF.EXISTS bikes:models "Smoky Mountain Striker" (integer) 1 > CF.EXISTS bikes:models "Terrible Bike Name" (integer) 0 > CF.DEL bikes:models "Smoky Mountain Striker" (integer) 1

4.4、Search

  • 使用以下语法创建 JSON 索引:

FT.CREATE {index_name} ON JSON SCHEMA {json_path} AS {attribute} {type}

例如,此命令创建一个索引,该索引对表示库存商品的每个 JSON 文档的名称、描述、价格和图像向量嵌入进行索引:

FT.CREATE itemIdx ON JSON PREFIX 1 item: SCHEMA $.name AS name TEXT $.description as description TEXT $.price AS price NUMERIC $.embedding AS embedding VECTOR FLAT 6 DIM 4 DISTANCE_METRIC L2 TYPE FLOAT32

  • 添加 JSON 文档

创建索引后,Redis Stack 会自动为数据库中存储的任何现有、修改或新创建的 JSON 文档编制索引。对于现有文档,索引在后台异步运行,因此可能需要一些时间文档才可用。修改的文档和新创建的文档会同步索引,因此在添加或修改命令完成时文档将可用。

第 1 项 JSON 文档:

{   "name": "Noise-cancelling Bluetooth headphones",   "description": "Wireless Bluetooth headphones with noise-cancelling technology",   "connection": {     "wireless": true,     "type": "Bluetooth"   },   "price": 99.98,   "stock": 25,   "colors": [     "black",     "silver"   ],   "embedding": [0.87, -0.15, 0.55, 0.03] }

第 2 项 JSON 文档:

{   "name": "Wireless earbuds",   "description": "Wireless Bluetooth in-ear headphones",   "connection": {     "wireless": true,     "type": "Bluetooth"   },   "price": 64.99,   "stock": 17,   "colors": [     "black",     "white"   ],   "embedding": [-0.7, -0.51, 0.88, 0.14] }

用于JSON.SET将这些文档存储在数据库中:

127.0.0.1:6379> JSON.SET item:1 $ '{"name":"Noise-cancelling Bluetooth headphones","description":"Wireless Bluetooth headphones with noise-cancelling technology","connection":{"wireless":true,"type":"Bluetooth"},"price":99.98,"stock":25,"colors":["black","silver"],"embedding":[0.87,-0.15,0.55,0.03]}' "OK" 127.0.0.1:6379> JSON.SET item:2 $ '{"name":"Wireless earbuds","description":"Wireless Bluetooth in-ear headphones","connection":{"wireless":true,"type":"Bluetooth"},"price":64.99,"stock":17,"colors":["black","white"],"embedding":[-0.7,-0.51,0.88,0.14]}' "OK"

由于在这种情况下索引是同步的,因此一旦JSON.SET命令返回,文档将在索引上可用。任何与索引内容匹配的后续查询都将返回该文档。

  • 搜索索引

要搜索 JSON 文档的索引,请使用以下FT.SEARCH命令。您可以搜索SCHEMA.

例如,使用以下查询来搜索名称中含有“earbuds”一词的商品:

127.0.0.1:6379> FT.SEARCH itemIdx '@name:(earbuds)' 1) "1" 2) "item:2" 3) 1) "$"    2) "{\"name\":\"Wireless earbuds\",\"description\":\"Wireless Bluetooth in-ear headphones\",\"connection\":{\"wireless\":true,\"connection\":\"Bluetooth\"},\"price\":64.99,\"stock\":17,\"colors\":[\"black\",\"white\"],\"embedding\":[-0.7,-0.51,0.88,0.14]}"



相关实践学习
对象存储OSS快速上手——如何使用ossbrowser
本实验是对象存储OSS入门级实验。通过本实验,用户可学会如何用对象OSS的插件,进行简单的数据存、查、删等操作。
目录
相关文章
|
8月前
|
人工智能 NoSQL Java
Spring AI 进阶之路03:集成RAG构建高效知识库
本文介绍如何在Spring Boot中集成RAG(检索增强生成)技术,通过Redis向量数据库为大模型外挂私域知识库。手把手实现文档上传、切分、向量化存储,并构建支持普通对话与知识库问答双模式的智能聊天机器人,解决大模型对私有信息无知的问题,助力打造企业级AI应用。
2447 1
|
6月前
|
JSON Java 数据格式
Feign 复杂对象参数传递避坑指南:从报错到优雅落地
本文深入剖析了SpringCloud Feign在复杂对象参数传递中的常见问题及解决方案。文章首先分析了GET请求传递复杂对象失败的底层原因,包括HTTP规范约束和Feign参数解析逻辑。针对GET场景,提供了四种解决方案:@SpringQueryMap(首选)、手动拆分属性+@RequestParam、MultiValueMap封装和自定义FeignEncoder,详细比较了各方案的优缺点和适用场景。对于POST场景,推荐使用@RequestBody注解传递JSON请求体。
1112 6
|
人工智能 JavaScript Java
【SpringAIAlibaba新手村系列】(1)初识 Spring AI Alibaba 框架
本文介绍了SpringAIAlibaba框架的基本概念和使用方法。作为Spring官方AI框架的阿里云实现版本,它简化了Java开发者调用AI模型的过程。文章详细讲解了核心概念如ChatModel、ChatClient,以及阿里云百炼平台的功能。通过HelloWorld项目示例,展示了如何配置APIKey、编写控制层代码,实现普通调用和流式输出两种AI交互方式。重点阐述了SpringAI与SpringAIAlibaba的关系,以及自动配置机制的工作原理,帮助开发者快速上手这一框架。
7977 9
|
5月前
|
存储 人工智能 前端开发
使用Spring AI Alibaba构建智能体Agent
本文详解使用Spring AI Alibaba框架,结合DashScope和React Agent,通过两个实战案例(基础测试+生产级应用),教你快速构建Java AI智能体
2827 7
|
10月前
|
存储 人工智能 Java
AI 超级智能体全栈项目阶段四:学术分析 AI 项目 RAG 落地指南:基于 Spring AI 的本地与阿里云知识库实践
本文介绍RAG(检索增强生成)技术,结合Spring AI与本地及云知识库实现学术分析AI应用,利用阿里云Qwen-Plus模型提升回答准确性与可信度。
2547 90
AI 超级智能体全栈项目阶段四:学术分析 AI 项目 RAG 落地指南:基于 Spring AI 的本地与阿里云知识库实践
|
9月前
|
人工智能 Java API
Java 正式进入 Agentic AI 时代:Spring AI Alibaba 1.1 发布背后的技术演进
Spring AI Alibaba 1.1 正式发布,提供极简方式构建企业级AI智能体。基于ReactAgent核心,支持多智能体协作、上下文工程与生产级管控,助力开发者快速打造可靠、可扩展的智能应用。
5374 43
|
7月前
|
人工智能 自然语言处理 Java
Spring AI Alibaba实战:从0到1构建企业级智能应用
本文介绍了基于SpringAI Alibaba框架开发AI原生应用的实战指南。文章首先分析了SpringAI Alibaba作为SpringAI本土化版本的核心优势,包括深度适配阿里云生态、中文语境优化等特性。随后详细讲解了开发环境的搭建过程,包括JDK17、SpringBoot3.2.2等技术栈的配置。通过三个实战案例展示了核心功能实现:基础文本生成、结合MyBatisPlus的智能问答系统、以及流式响应和函数调用等高级特性。
6048 6
|
10月前
|
存储 NoSQL Redis
手把手教你用 Docker 部署 Redis
Redis是高性能内存数据库,支持多种数据结构,适用于缓存、消息队列等场景。本文介绍如何通过Docker快速拉取轩辕镜像并部署Redis,涵盖快速启动、持久化存储及docker-compose配置,助力开发者高效搭建稳定服务。
2947 8
|
人工智能 自然语言处理 Java
从青铜到王者,DeepSeek+Spring AI 搭建 RAG 知识库
本文介绍了基于RAG(检索增强生成)技术构建知识库的原理与实现方法。RAG通过结合检索与生成模型,提升大语言模型在问答任务中的准确性与相关性,有效缓解“幻觉”问题。文章还详细讲解了如何利用DeepSeek与SpringAI搭建高效RAG系统,并提供了完整的Java代码示例,帮助开发者快速实现文档处理、向量存储与智能问答功能。适用于智能客服、内容生成、辅助决策等多个场景。
2568 2

热门文章

最新文章