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]}"



目录
相关文章
|
4天前
|
调度 云计算 芯片
云超算技术跃进,阿里云牵头制定我国首个云超算国家标准
近日,由阿里云联合中国电子技术标准化研究院主导制定的首个云超算国家标准已完成报批,不久后将正式批准发布。标准规定了云超算服务涉及的云计算基础资源、资源管理、运行和调度等方面的技术要求,为云超算服务产品的设计、实现、应用和选型提供指导,为云超算在HPC应用和用户的大范围采用奠定了基础。
179564 18
|
12天前
|
存储 运维 安全
云上金融量化策略回测方案与最佳实践
2024年11月29日,阿里云在上海举办金融量化策略回测Workshop,汇聚多位行业专家,围绕量化投资的最佳实践、数据隐私安全、量化策略回测方案等议题进行深入探讨。活动特别设计了动手实践环节,帮助参会者亲身体验阿里云产品功能,涵盖EHPC量化回测和Argo Workflows量化回测两大主题,旨在提升量化投研效率与安全性。
云上金融量化策略回测方案与最佳实践
|
14天前
|
人工智能 自然语言处理 前端开发
从0开始打造一款APP:前端+搭建本机服务,定制暖冬卫衣先到先得
通义灵码携手科技博主@玺哥超carry 打造全网第一个完整的、面向普通人的自然语言编程教程。完全使用 AI,再配合简单易懂的方法,只要你会打字,就能真正做出一个完整的应用。
9171 23
|
17天前
|
Cloud Native Apache 流计算
资料合集|Flink Forward Asia 2024 上海站
Apache Flink 年度技术盛会聚焦“回顾过去,展望未来”,涵盖流式湖仓、流批一体、Data+AI 等八大核心议题,近百家厂商参与,深入探讨前沿技术发展。小松鼠为大家整理了 FFA 2024 演讲 PPT ,可在线阅读和下载。
4862 12
资料合集|Flink Forward Asia 2024 上海站
|
18天前
|
自然语言处理 数据可视化 API
Qwen系列模型+GraphRAG/LightRAG/Kotaemon从0开始构建中医方剂大模型知识图谱问答
本文详细记录了作者在短时间内尝试构建中医药知识图谱的过程,涵盖了GraphRAG、LightRAG和Kotaemon三种图RAG架构的对比与应用。通过实际操作,作者不仅展示了如何利用这些工具构建知识图谱,还指出了每种工具的优势和局限性。尽管初步构建的知识图谱在数据处理、实体识别和关系抽取等方面存在不足,但为后续的优化和改进提供了宝贵的经验和方向。此外,文章强调了知识图谱构建不仅仅是技术问题,还需要深入整合领域知识和满足用户需求,体现了跨学科合作的重要性。
|
25天前
|
人工智能 自动驾驶 大数据
预告 | 阿里云邀您参加2024中国生成式AI大会上海站,马上报名
大会以“智能跃进 创造无限”为主题,设置主会场峰会、分会场研讨会及展览区,聚焦大模型、AI Infra等热点议题。阿里云智算集群产品解决方案负责人丛培岩将出席并发表《高性能智算集群设计思考与实践》主题演讲。观众报名现已开放。
|
13天前
|
人工智能 容器
三句话开发一个刮刮乐小游戏!暖ta一整个冬天!
本文介绍了如何利用千问开发一款情侣刮刮乐小游戏,通过三步简单指令实现从单个功能到整体框架,再到多端优化的过程,旨在为生活增添乐趣,促进情感交流。在线体验地址已提供,鼓励读者动手尝试,探索编程与AI结合的无限可能。
三句话开发一个刮刮乐小游戏!暖ta一整个冬天!
|
13天前
|
消息中间件 人工智能 运维
12月更文特别场——寻找用云高手,分享云&AI实践
我们寻找你,用云高手,欢迎分享你的真知灼见!
1009 67