Redis Stack是什么,你知道吗?

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储OSS,敏感数据保护2.0 200GB 1年
对象存储 OSS,内容安全 1000 次 1年
简介: 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搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
目录
打赏
0
0
1
0
74
分享
相关文章
|
11月前
|
Redis 作为向量数据库快速入门指南
Redis 作为向量数据库快速入门指南
818 1
Java程序员必学:JVM架构完全解读
Java 虚拟机(JVM)是 Java 编程的核心,深入理解其架构对开发者意义重大。本文详细解读 JVM 架构,涵盖类加载器子系统、运行时数据区等核心组件,剖析类加载机制,包括加载阶段、双亲委派模型等内容。阐述内存管理原理,介绍垃圾回收算法与常见回收器,并结合案例讲解调优策略。还分享 JVM 性能瓶颈识别与调优方法,分析 Java 语言特性对性能的影响,给出数据结构选择、I/O 操作及并发同步处理的优化技巧,同时探讨 JVM 安全模型与错误处理机制,助力开发者提升编程能力与程序性能。
Java程序员必学:JVM架构完全解读
轻松集成私有化部署Dify文本生成型应用
Dify 是一款开源的大语言模型应用开发平台,融合了后端即服务(Backend as Service)和 LLMOps 的理念,使开发者能快速搭建生产级生成式 AI 应用。通过阿里云计算巢,用户可以一键部署 Dify 社区版,享受独享的计算和网络资源,并无代码完成钉钉、企业微信等平台的应用集成。本文将详细介绍如何部署 Dify 并将其集成到钉钉群聊机器人和企业微信中,帮助您轻松实现 AI 应用的定义与数据运营,提升工作效率。
3914 65
轻松集成私有化部署Dify文本生成型应用
Redis 与 AI:从缓存到智能搜索的融合之路
Redis 已从传统缓存系统发展为强大的 AI 支持平台,其向量数据库功能和 RedisAI 模块为核心,支持高维向量存储、相似性搜索及模型服务。文章探讨了 Redis 在实时数据缓存、语义搜索与会话持久化中的应用场景,并通过代码案例展示了与 Spring Boot 的集成方式。总结来看,Redis 结合 AI 技术,为现代应用提供高效、灵活的解决方案。
Redis 之 WRONGTYPE Operation against a key holding the wrong kind of value【bug解决】
Redis 之 WRONGTYPE Operation against a key holding the wrong kind of value【bug解决】
11183 0
使用Qwen2.5+SpringBoot+SpringAI+SpringWebFlux的基于意图识别的多智能体架构方案
本项目旨在解决智能体的“超级入口”问题,通过开发基于意图识别的多智能体框架,实现用户通过单一交互入口使用所有智能体。项目依托阿里开源的Qwen2.5大模型,利用其强大的FunctionCall能力,精准识别用户意图并调用相应智能体。 核心功能包括: - 意图识别:基于Qwen2.5的大模型方法调用能力,准确识别用户意图。 - 业务调用中心:解耦框架与业务逻辑,集中处理业务方法调用,提升系统灵活性。 - 会话管理:支持连续对话,保存用户会话历史,确保上下文连贯性。 - 流式返回:支持打字机效果的流式返回,增强用户体验。 感谢Qwen2.5系列大模型的支持,使项目得以顺利实施。
2113 8
使用Qwen2.5+SpringBoot+SpringAI+SpringWebFlux的基于意图识别的多智能体架构方案
Spring AI Alibaba + 通义千问,开发AI应用如此简单!!!
本文介绍了如何使用Spring AI Alibaba开发一个简单的AI对话应用。通过引入`spring-ai-alibaba-starter`依赖和配置API密钥,结合Spring Boot项目,只需几行代码即可实现与AI模型的交互。具体步骤包括创建Spring Boot项目、编写Controller处理对话请求以及前端页面展示对话内容。此外,文章还介绍了如何通过添加对话记忆功能,使AI能够理解上下文并进行连贯对话。最后,总结了Spring AI为Java开发者带来的便利,简化了AI应用的开发流程。
6400 2
Spring AI Alibaba + 通义千问,开发AI应用如此简单!!!
Spring Cloud Alibaba AI 入门与实践
本文将介绍 Spring Cloud Alibaba AI 的基本概念、主要特性和功能,并演示如何完成一个在线聊天和在线画图的 AI 应用。
1356 7
docker-compose部署mysql8
使用docker-compose容器化部署mysql8
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问