使用 Redis 客户端 API 库连接
提示
来自deepseek解释
原文链接:https://redis.io/docs/latest/develop/clients/
使用 Redis 客户端库从您自己的代码连接到 Redis 服务器。 我们为九种主要语言记录了以下客户端库:
* Redis 不为第三方客户端库提供官方支持。 然而,我们以尽力而为的方式贡献新功能、提供指导并与社区合作,以帮助确保这些库保持可靠和最新。
我们还为 Python、C#/.NET、Node.js 和 Java/Spring 提供了多个更高级的对象映射(OM)库。
社区支持的客户端
下表展示了一些流行的第三方客户端库。注意,Redis 不直接开发或贡献这些库。
要求
您需要访问一个 Redis 服务器才能使用这些库。 您可以通过本地安装 Redis 开源版(参见安装 Redis 开源版)或通过 Redis Cloud 的免费试用进行实验。 要在不编写代码的情况下与 Redis 服务器交互,请使用 Redis CLI 和 Redis Insight 工具。
为您的语言选择客户端库
对于某些语言,我们只推荐一个客户端库,但 Python、JavaScript、Java、C# 和 PHP 有多个选项。以下各节总结了每种语言各选项之间的差异。
Python
redis-py是大多数用例推荐的 Python 客户端库。RedisVL专用于处理高维向量数据,是 AI/ML 工作流的好选择。- RedisOM for Python 是一个对象映射库,为使用 Redis 数据结构提供高级 API。
JavaScript
node-redis是大多数用例推荐的 JavaScript 客户端库。ioredis是一个较旧的库,仍在支持中,但缺乏node-redis的一些新特性和性能优化。 注意,如果您有兴趣将ioredis项目转换为node-redis,有迁移指南可用(参见从 ioredis 迁移)。- RedisOM for Node.js 是一个对象映射库,为使用 Redis 数据结构提供高级 API。
Java
Jedis支持 Redis 的完整功能集,具有简单的 API,但仅限于同步操作。Lettuce支持同步、异步和响应式操作。然而,它的 API 比 Jedis 更复杂,并且目前不支持所有 Redis 功能(特别是时间序列和概率数据结构)。- RedisOM for Java 是一个对象映射库,为使用 Redis 数据结构提供高级 API。
C#
StackExchange.Redis是使用核心 Redis 数据类型和命令的推荐 C# 客户端库。NRedisStack在StackExchange.Redis的基础上构建,支持扩展的数据类型和功能集,例如 JSON、Redis 搜索 和 Time series。- RedisOM for .NET 是一个对象映射库,为使用 Redis 数据结构提供高级 API。
PHP
Predis是大多数用例推荐的 PHP 客户端库。它获得 Redis 团队的"尽力而为"支持(它是一个第三方库,但 Redis 团队为其贡献并帮助处理问题),并在 Redis 文档中有较好的覆盖。然而,它是用 PHP 实现的,与用 C 实现的 phpredis 相比,性能受限。- phpredis 是一个流行且维护良好的 PHP 客户端库,使用 PHP 的 C 扩展实现,以获得更好的性能。然而,它不受 Redis 团队的积极支持或文档记录。
客户端库决策树
使用下面的决策树帮助您根据前面部分中的建议选择适合您需求的客户端库。请注意,您应将结论视为研究的指南,而非最终答案。
decision-tree
id: client-recommendation
scope: clients
indentWidth: 28
rootQuestion: singleClientLanguageQuestion
questions:
singleClientLanguageQuestion:
text: |
您是否使用 Go、Rust、C、C++、Dart 或 Ruby?
whyAsk: |
这些语言只有一种推荐的客户端库,
因此选择是直接的
answers:
yes:
value: "是"
outcome:
label: |
这些语言只有一种推荐的客户端库。使用
上表中列出的您语言对应的客户端库。
id: singleClientLanguageOutcome
no:
value: "否"
nextQuestion: multiClientLanguageQuestion
multiClientLanguageQuestion:
text: |
您是否使用 Python、JavaScript、Java 或 C#/.NET
并且需要对象映射(类似 ORM)功能?
whyAsk: |
RedisOM 为这些语言提供高级 API。
如果您不需要 OM,我们将帮助您选择最佳的底层客户端
answers:
yes:
value: "是"
outcome:
label: |
使用您语言的 RedisOM
(适用于 Python、JavaScript、Java 和 C#/.NET)
id: redisOMOutcome
no:
value: "否"
nextQuestion: lowLevelClientQuestion
lowLevelClientQuestion:
text: 您使用哪种语言?
whyAsk: |
不同语言有不同的底层客户端库
针对其生态系统进行了优化
answers:
python:
value: Py
nextQuestion: pythonLowLevelQuestion
javascript:
value: JS
nextQuestion: javascriptLowLevelQuestion
java:
value: Java
nextQuestion: javaLowLevelQuestion
php:
value: PHP
nextQuestion: phpLowLevelQuestion
dotnet:
value: "C#"
nextQuestion: dotnetLowLevelQuestion
dotnetLowLevelQuestion:
text: |
您是否需要 Redis Stack 功能,如 JSON、
搜索、向量搜索或 Time series?
whyAsk: |
StackExchange.Redis 是核心 Redis 命令的推荐客户端,
而 NRedisStack 在此基础上扩展了对 Redis Stack 数据类型和功能的支持
answers:
yes:
value: "是"
outcome:
label: 使用 NRedisStack
id: nRedisStackOutcome
no:
value: "否"
outcome:
label: 使用 StackExchange.Redis
id: stackExchangeRedisOutcome
pythonLowLevelQuestion:
text: |
您是否正在构建主要基于高维向量操作的
AI/ML 应用程序?
whyAsk: |
RedisVL 专用于 AI/ML 向量数据工作流,
而 redis-py 更适合通用用途
answers:
yes:
value: "是"
outcome:
label: 使用 RedisVL
id: redisVLOutcome
No:
value: "否"
outcome:
label: 使用 redis-py
id: redisPyOutcome
javaLowLevelQuestion:
text: 您是否需要异步或响应式操作?
whyAsk: |
Jedis 仅支持同步操作,API 更简单,
而 Lettuce 支持异步和响应式模式
answers:
yes:
value: "是"
outcome:
label: 使用 Lettuce
id: lettuceOutcome
no:
value: "否"
outcome:
label: 使用 Jedis
id: jedisOutcome
javascriptLowLevelQuestion:
text: 您是否有使用 ioredis 的现有代码库?
whyAsk: |
如果您已经在使用 ioredis,可以继续使用它。
对于新项目,推荐使用 node-redis
answers:
yes:
value: "是"
nextQuestion: ioredisAdvancedFeaturesQuestion
no:
value: "否"
outcome:
label: 使用 node-redis
id: nodeRedisOutcome
ioredisAdvancedFeaturesQuestion:
text: 您是否想使用高级 Redis 功能,如搜索、向量数据库和 JSON?
answers:
yes:
value: "是"
outcome:
label: 使用我们的迁移指南迁移到 node-redis
id: migrateToNodeRedisOutcome
no:
value: "否"
outcome:
label: 继续使用 ioredis
id: continueIoredisOutcome
phpLowLevelQuestion:
text: |
最大性能是否比完整的支持和文档更重要?
whyAsk: |
PhpRedis 是一个 C 扩展,性能更好,
而 Predis 是一个纯 PHP 实现,支持和文档更完善
answers:
yes:
value: "是"
outcome:
label: 使用 PhpRedis
id: phpredisOutcome
no:
value: "否"
outcome:
label: 使用 Predis
id: predisOutcome