Redis 与 AI:从缓存到智能搜索的融合之路

Redis 与 AI:从缓存到智能搜索的融合之路

在当今数字化时代,Redis 不仅是一个高性能的缓存系统,更是一个强大的 AI 支持平台。Redis 通过其向量数据库功能和 AI 工具,为现代应用提供了独特的技术优势。

一、Redis 的 AI 能力

(一)向量数据库功能

Redis 的向量数据库功能是其 AI 能力的核心。它支持以下功能:

  1. 存储高维向量数据:Redis 可以存储向量及其相关的元数据,这些数据可以存储在哈希或 JSON 文档中。
  2. 执行相似性搜索:通过向量搜索(KNN 查询),Redis 可以快速找到与目标向量最相似的向量。
  3. 支持向量范围查询:允许用户基于向量距离进行范围查询。
  4. 元数据过滤功能:在执行向量搜索时,可以结合其他条件进行筛选,例如根据用户 ID 或类别过滤结果。

(二)RedisAI 模块

RedisAI 是 Redis 的一个模块,旨在将机器学习和深度学习带入 Redis 生态系统。它的主要特性包括:

  1. 张量存储:支持存储多维数组(张量),这些张量可以直接用作模型的输入或输出。
  2. 模型服务:支持加载和执行来自 TensorFlow、PyTorch 和 ONNX 的预训练模型。
  3. 脚本执行:通过 TorchScript 提供在 CPU 或 GPU 上执行预处理和后处理操作的能力。
  4. DAG 执行:允许定义和执行包含多个操作的有向无环图(DAG),实现复杂的推理管道。
  5. GPU 加速:支持 GPU 执行,充分利用硬件加速能力。

(三)Redis for AI

Redis for AI 是 Redis 提供的一套工具,旨在帮助开发者更高效地构建和部署 AI 应用。它包括:

  1. 向量数据库:提供世界上最快的向量数据库,支持高效的相似性搜索。
  2. 缓存解决方案:提供先进的缓存功能,减少对大型语言模型的依赖,降低成本并提升性能。
  3. 实时架构(RAG):支持基于检索增强生成(Retrieval Augmented Generation)的应用,提升智能体的推理能力和响应速度。

二、Redis 作为向量数据库的运行测试代码

(一)环境准备

  1. 安装 Redis Stack
    使用 Docker 安装 Redis Stack:

    docker run -d --name redis-stack -p 6379:6379 redis/redis-stack:latest
    
  2. 准备数据
    下面的代码展示了如何将数据存储到 Redis 中,并创建向量字段:

    import redis
    import numpy as np
    from redis.commands.search.field import TextField, VectorField
    from redis.commands.search.indexDefinition import IndexDefinition, IndexType
    from redis.commands.search.query import Query
    from sentence_transformers import SentenceTransformer# 连接 Redis
    client = redis.Redis(host="localhost", port=6379, decode_responses=True)# 存储向量数据
    keys = ["doc:1", "doc:2"]
    embeddings = np.array([[0.1, 0.2, 0.3], [0.4, 0.5, 0.6]], dtype=np.float32)
    for key, embedding in zip(keys, embeddings):client.hset(key, mapping={"embedding": embedding.tobytes()})# 创建索引
    schema = (TextField("id", no_stem=True, as_name="id"),VectorField("embedding","FLAT",{"TYPE": "FLOAT32", "DIM": 3, "DISTANCE_METRIC": "L2"},as_name="embedding",),
    )
    definition = IndexDefinition(prefix=["doc:"], index_type=IndexType.HASH)
    client.ft("idx:docs").create_index(fields=schema, definition=definition)
    

(二)向量搜索测试

以下代码展示了如何执行向量搜索:

# 查询向量
query_embedding = np.array([0.1, 0.2, 0.3], dtype=np.float32)
query = (Query("(*)=>[KNN 2 @embedding $query_embedding AS score]").sort_by("score").return_fields("id", "score").dialect(2)
)
results = client.ft("idx:docs").search(query, query_params={"query_embedding": query_embedding.tobytes()})
for doc in results.docs:print(doc)

三、Spring Boot 集成 Redis 向量数据库的代码案例

(一)环境准备

  1. 添加依赖
    pom.xml 文件中添加以下依赖:

    <dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-redis-store-spring-boot-starter</artifactId>
    </dependency>
    
  2. 配置 Redis
    application.properties 文件中配置 Redis:

    spring.ai.vectorstore.redis.uri=redis://localhost:6379
    spring.ai.vectorstore.redis.index=default-index
    spring.ai.vectorstore.redis.prefix=default:
    

(二)使用 Redis 向量数据库

以下代码展示了如何在 Spring Boot 应用程序中使用 Redis 向量数据库:

@Autowired
private VectorStore vectorStore;@PostMapping("/embedding")
public ResultEntity<Boolean> embedding(@RequestParam MultipartFile file) throws Exception {TikaDocumentReader tikaDocumentReader = new TikaDocumentReader(new InputStreamResource(file.getInputStream()));List<Document> splitDocuments = new TokenTextSplitter().apply(tikaDocumentReader.read());vectorStore.add(splitDocuments);return ResultUtils.success(true);
}@GetMapping("/query")
public List<Document> query(@RequestParam String query) {return vectorStore.similaritySearch(query);
}

四、Redis 的 AI 应用场景

(一)实时数据缓存

Redis 的内存存储特性使其能够快速缓存 API 返回值,提高响应速度。例如,使用 LangChain 的 RedisCache 实现 LLM(大语言模型)的缓存功能:

set_llm_cache(RedisCache(redis_client));

(二)语义搜索与检索

Redis 的向量数据库功能可以用于语义搜索。例如,结合 LangChain 的 RedisVectorStore,可以实现智能搜索功能:

vector_store = RedisVectorStore(redis_client);

(三)会话持久化

Redis 可以记录和检索会话历史,增强对话系统的持续性。例如,使用 LangGraph 的 langgraph-checkpoint-redis,可以实现跨会话的持久化记忆。

五、总结

Redis 的 AI 能力和缓存功能的结合,为现代应用架构提供了强大的支持。通过合理配置和使用,可以在单一实例中同时满足缓存和向量搜索的需求,既节省了资源,又简化了系统架构。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/900155.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode435 -- 预定会议问题

0. ref 参考自 1. 题目描述 预定会议问题&#xff1a;给定我们一堆区间&#xff0c;区间不能重叠&#xff08; [ 1 , 2 ] [1,2] [1,2] 和 [ 2 , 3 ] [2,3] [2,3] 的 2 2 2 不算重叠&#xff09;&#xff0c;求最多能保留多少个区间&#xff1f; 做法&#xff1a;贪心&#…

leetcode51-N皇后

leetcode 51 思路 本题可以使用回溯算法来解决。回溯算法通过尝试所有可能的解决方案来找到问题的解的算法&#xff0c;当发现当前的选择无法得到有效的解决方案时&#xff0c;就回溯到上一步&#xff0c;尝试其他的选择。对于 N 皇后问题&#xff0c;我们可以逐行放置皇后&…

linux paste 命令

paste 是 Linux 中一个用于水平合并文件内容的命令行工具&#xff0c;它将多个文件的对应行以并行方式拼接&#xff0c;默认用制表符&#xff08;Tab&#xff09;分隔。 1. 基本语法 paste [选项] 文件1 文件2 ... 2. 常用选项 选项说明-d指定拼接后的分隔符&#xff08;默…

Linux 入门:基础开发工具(上)vim,gcc/g++,make/makefile

目录 一.软件包管理器 一&#xff09;.软件包 二&#xff09;.安装软件 三&#xff09;.删除软件 二.编辑器vim 一&#xff09;.vim的基本介绍 1.正常/普通/命令模式(Normal mode) 2.插入模式(Insert mode) 3.底行模式(last line mode) 二&#xff09;.vim的基本操作 …

在CPU服务器上部署Ollama和Dify的过程记录

在本指南中&#xff0c;我将详细介绍如何在CPU服务器上安装和配置Ollama模型服务和Dify平台&#xff0c;以及如何利用Docker实现这些服务的高效部署和迁移。本文分为三大部分&#xff1a;Ollama部署、Dify环境配置和Docker环境管理&#xff0c;适合需要在本地或私有环境中运行A…

请求被中止: 未能创建 SSL/TLS 安全通道。

需要安装vs2019社区办&#xff0c;下载VisualStudioSetup.exe后&#xff0c;报无法从"https://aka,ms/vs/16/release/channel"下载通道清单错误&#xff0c;接着打开%temp%目录下的最新日志&#xff0c;发现日志里报&#xff1a; [27d4:000f][2025-04-04T21:15:43] …

第六课:AI绘画进阶模型

文章目录 Part.01 文本嵌入(Embeddings)Part.02 低秩模型(LoRa)Part.03 超网络(Hypernetwork)Part.01 文本嵌入(Embeddings) Embeddings(Textual Inversion)Checkpoint如果是字典,Embeddings就是书签,让检索更加高效深度学习中Embeddings叫做嵌入式向量使用方法:下载Embeddi…

阅读分析Linux0.11 /boot/setup.s

目录 第一部分第二部分第三部分 该源文件功能分为三部分&#xff1a; &#xff08;1&#xff09;源文件开始部分是通过各种中断指令&#xff0c; 初始化计算机的组成硬件&#xff0c;获得硬件的参数&#xff0c;然后保存到段空间0X9000。该空间原来是保存加载到内存的引导扇区内…

TSMaster在新能源汽车研发测试中的硬核应用指南

——从仿真到标定&#xff0c;全面赋能智能汽车开发 引言&#xff1a;新能源汽车测试的挑战与TSMaster的破局之道 新能源汽车的快速发展对研发测试提出了更高要求&#xff1a;复杂的电控系统、高实时性通信需求、多域融合的验证场景&#xff0c;以及快速迭代的开发周期。传统测…

web漏洞靶场学习分享

靶场&#xff1a;pikachu靶场 pikachu漏洞靶场漏洞类型: Burt Force(暴力破解漏洞)XSS(跨站脚本漏洞)CSRF(跨站请求伪造)SQL-Inject(SQL注入漏洞)RCE(远程命令/代码执行)Files Inclusion(文件包含漏洞)Unsafe file downloads(不安全的文件下载)Unsafe file uploads(不安全的文…

《Linux内存管理:实验驱动的深度探索》【附录】【实验环境搭建 4】【Qemu 如何模拟numa架构】

我们在学习 linux 内核时&#xff0c;会涉及到很多 numa 的知识&#xff0c;那我们该如何在 qemu 中模拟这种情况&#xff0c;来配合我们的学习呢&#xff1f; 我们该如何模拟 如下的 numa 架构 Qemu 模拟 NUMA 架构 -M virt,gic-version3,virtualizationon,typevirt \ -cp…

YOLOv12 从预训练迈向自主训练,第一步数据准备

视频讲解&#xff1a; YOLOv12 从预训练迈向自主训练&#xff0c;第一步数据准备 前面复现过yolov12&#xff0c;使用pre-trained的模型进行过测试&#xff0c;今天来讲下如何训练自己的模型&#xff0c;第一步先准备数据和训练格式 https://gitcode.com/open-source-toolkit/…

Keil 5 找不到编译器 Missing:Compiler Version 5 的解决方法

用到自记&#xff1a; 下载地址&#xff1a; Keil5 MDK541.zip ​编辑https://pan.baidu.com/s/1bOPsuVZhD_Wj4RJS90Mbtg?pwdMDK5 问题描述 没有找到 compiler version5 &#xff1a; 1. 下载 Arm Compiler 5 也可以直接点击下载文章开头的文件。 2. 安装 直接安装在KEI…

结肠镜3D视频数据集-C3VD论文中文版

文章目录 标题作者摘要一、介绍1.1. 相关工作1.1.1. 内镜重建数据集1.1.2. 注册真实和虚拟内窥镜图像1.1.3. 2D-3D注册1.2. 贡献 二、方法2.1. 幻影模型生产2.2. 数据采集2.3. 注册流程概述2.3.1. 数据预处理2.3.2. 目标深度估计2.3.3. 渲染深度帧2.3.4. 边缘损失和优化 2.4. 模…

hadoop 集群的常用命令

# 查看HDFS目录内容 hadoop fs -ls /path # 创建目录 hadoop fs -mkdir /path/to/dir # 上传本地文件到HDFS hadoop fs -put localfile /hdfs/path # 下载HDFS文件到本地 hadoop fs -get /hdfs/path localfile # 查看文件内容 hadoop fs -cat /hdfs/path/file # 删除文件/…

MaxEnt物种分布建模全流程;R+ArcGIS+MaxEnt模型物种分布模拟、参数优化方法、结果分析制图与论文写作

融合R语言的MaxEnt模型具有以下具体优势&#xff1a; 数据处理高效便捷 &#x1f4ca;强大的数据预处理功能&#xff1a;R语言提供了丰富的数据处理工具&#xff0c;能够轻松完成数据清洗、筛选、转换等操作&#xff0c;为MaxEnt模型提供高质量的输入数据。 &#x1f310;自动…

Java基础 4.4

1.方法快速入门 public class Method01 {//编写一个main方法public static void main(String[] args) {//方法使用//1.方法写好后&#xff0c;如果不去调用(使用)&#xff0c;不会输出Person p1 new Person();p1.speak();//调用方法 p1.cal01();//调用计算方法1p1.cal02(10);…

Tiktok矩阵运营中使用云手机的好处

Tiktok矩阵运营中使用云手机的好处 云手机在TikTok矩阵运营中能够大幅提高管理效率、降低封号风险&#xff0c;并节省成本&#xff0c;是非常实用的运营工具。TikTok矩阵运营使用云手机有很多优势&#xff0c;特别是对于需要批量管理账号、提高运营效率的团队来说。以下是几个…

指针函数、函数指针和指针函数指针的全面总结

C中指针函数、函数指针和指针函数指针的全面总结 一、核心概念区别 概念本质声明示例核心特征指针函数返回指针的函数int* func(int);函数定义&#xff0c;返回值是指针类型函数指针指向函数的指针int (*ptr)(int);变量&#xff0c;存储函数地址指针函数指针指向指针函数的指…

CherryStudio MCP实战(一)filesystem篇

随着DeepSeek的爆火&#xff0c;各行各业都在围绕着大模型寻找新质量生产力。简单来说&#xff0c;DeepSeek像是人的大脑&#xff0c;他可以推理&#xff0c;帮你思考一些问题&#xff0c;但是具体要做一些事情的时候&#xff0c;他还需要“手脚”来协同。MCP&#xff08;Model…