Redis 绑定规范
组件格式
要设置 Redis 绑定,需创建一个类型为 bindings.redis 的组件。请参考本指南了解如何创建和应用绑定配置。
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
  name: <NAME>
spec:
  type: bindings.redis
  version: v1
  metadata:
  - name: redisHost
    value: "<address>:6379"
  - name: redisPassword
    value: "**************"
  - name: useEntraID
    value: "true"
  - name: enableTLS
    value: "<bool>"
警告
上述示例使用了明文字符串作为秘密。建议使用秘密存储,如此处所述。规范元数据字段
| 字段 | 必需 | 绑定支持 | 详情 | 示例 | 
|---|---|---|---|---|
redisHost | Y | 输出 | Redis 主机地址 | "localhost:6379" | 
redisPassword | N | 输出 | Redis 密码 | "password" | 
redisUsername | N | 输出 | Redis 主机的用户名。默认为空。确保您的 Redis 服务器版本为 6 或更高,并已正确创建 ACL 规则。 | "username" | 
useEntraID | N | 输出 | 实现 Azure Cache for Redis 的 EntraID 支持。启用此功能之前:
  | "true", "false" | 
enableTLS | N | 输出 | 如果 Redis 实例支持带有公共证书的 TLS,则可以配置启用或禁用 TLS。默认为 "false" | "true", "false" | 
clientCert | N | 输出 | 客户端证书的内容,用于需要客户端证书的 Redis 实例。必须与 clientKey 一起使用,并且 enableTLS 必须设置为 true。建议使用秘密存储,如此处所述 | "----BEGIN CERTIFICATE-----\nMIIC..." | 
clientKey | N | 输出 | 客户端私钥的内容,与 clientCert 一起用于身份验证。建议使用秘密存储,如此处所述 | "----BEGIN PRIVATE KEY-----\nMIIE..." | 
failover | N | 输出 | 启用故障转移配置的属性。需要设置 sentinalMasterName。默认为 "false" | "true", "false" | 
sentinelMasterName | N | 输出 | 哨兵主名称。参见 Redis Sentinel 文档 | "", "127.0.0.1:6379" | 
redeliverInterval | N | 输出 | 检查待处理消息以重新传递的间隔。默认为 "60s"。"0" 禁用重新传递。 | "30s" | 
processingTimeout | N | 输出 | 消息在尝试重新传递之前必须挂起的时间。默认为 "15s"。"0" 禁用重新传递。 | "30s" | 
redisType | N | 输出 | Redis 的类型。有两个有效值,一个是 "node" 表示单节点模式,另一个是 "cluster" 表示 Redis 集群模式。默认为 "node"。 | "cluster" | 
redisDB | N | 输出 | 连接到 Redis 后选择的数据库。如果 "redisType" 是 "cluster",则忽略此选项。默认为 "0"。 | "0" | 
redisMaxRetries | N | 输出 | 在放弃之前重试命令的最大次数。默认情况下不重试失败的命令。 | "5" | 
redisMinRetryInterval | N | 输出 | 每次重试之间 Redis 命令的最小退避时间。默认为 "8ms";"-1" 禁用退避。 | "8ms" | 
redisMaxRetryInterval | N | 输出 | 每次重试之间 Redis 命令的最大退避时间。默认为 "512ms";"-1" 禁用退避。 | "5s" | 
dialTimeout | N | 输出 | 建立新连接的拨号超时时间。默认为 "5s"。 | "5s" | 
readTimeout | N | 输出 | 套接字读取的超时时间。如果达到,Redis 命令将因超时而失败而不是阻塞。默认为 "3s","-1" 表示无超时。 | "3s" | 
writeTimeout | N | 输出 | 套接字写入的超时时间。如果达到,Redis 命令将因超时而失败而不是阻塞。默认为 readTimeout。 | "3s" | 
poolSize | N | 输出 | 最大套接字连接数。默认是每个 CPU 10 个连接,如 runtime.NumCPU 报告。 | "20" | 
poolTimeout | N | 输出 | 如果所有连接都忙,客户端在返回错误之前等待连接的时间。默认是 readTimeout + 1 秒。 | "5s" | 
maxConnAge | N | 输出 | 客户端在此连接年龄时退役(关闭)连接。默认是不关闭老化连接。 | "30m" | 
minIdleConns | N | 输出 | 为了避免创建新连接的性能下降,保持打开的最小空闲连接数。默认为 "0"。 | "2" | 
idleCheckFrequency | N | 输出 | 空闲连接清理器进行空闲检查的频率。默认为 "1m"。"-1" 禁用空闲连接清理器。 | "-1" | 
idleTimeout | N | 输出 | 客户端关闭空闲连接的时间。应小于服务器的超时时间。默认为 "5m"。"-1" 禁用空闲超时检查。 | "10m" | 
绑定支持
此组件支持具有以下操作的输出绑定:
creategetdelete
create
您可以使用 create 操作在 Redis 中存储记录。这会设置一个键来保存一个值。如果键已经存在,则会覆盖该值。
请求
{
  "operation": "create",
  "metadata": {
    "key": "key1"
  },
  "data": {
    "Hello": "World",
    "Lorem": "Ipsum"
  }
}
响应
如果成功,将返回 HTTP 204(无内容)和空响应体。
get
您可以使用 get 操作在 Redis 中获取记录。这会获取之前设置的键。
这需要一个可选参数 delete,默认值为 false。当设置为 true 时,此操作使用 Redis 的 GETDEL 操作。例如,它返回之前设置的 value,然后删除它。
请求
{
  "operation": "get",
  "metadata": {
    "key": "key1"
  },
  "data": {
  }
}
响应
{
  "data": {
    "Hello": "World",
    "Lorem": "Ipsum"
  }
}
带删除标志的请求
{
  "operation": "get",
  "metadata": {
    "key": "key1",
    "delete": "true"
  },
  "data": {
  }
}
delete
您可以使用 delete 操作在 Redis 中删除记录。无论键是否存在,都会返回成功。
请求
{
  "operation": "delete",
  "metadata": {
    "key": "key1"
  }
}
响应
如果成功,将返回 HTTP 204(无内容)和空响应体。
创建 Redis 实例
Dapr 可以使用任何 Redis 实例 - 容器化的、在本地开发机器上运行的或托管的云服务,只要 Redis 的版本是 5.0.0 或更高。
注意:Dapr 不支持 Redis >= 7。建议使用 Redis 6
Dapr CLI 将自动为您创建和设置一个 Redis Streams 实例。
当您运行 dapr init 时,Redis 实例将通过 Docker 安装,并且组件文件将创建在默认目录中。($HOME/.dapr/components 目录 (Mac/Linux) 或 %USERPROFILE%\.dapr\components 在 Windows 上)。
您可以使用 Helm 在我们的 Kubernetes 集群中快速创建一个 Redis 实例。此方法需要安装 Helm。
将 Redis 安装到您的集群中。
helm repo add bitnami https://charts.bitnami.com/bitnami helm install redis bitnami/redis --set image.tag=6.2运行
kubectl get pods查看现在在您的集群中运行的 Redis 容器。在您的 redis.yaml 文件中将
redis-master:6379添加为redisHost。例如:metadata: - name: redisHost value: redis-master:6379接下来,我们将获取我们的 Redis 密码,这在我们使用的操作系统上略有不同:
Windows: 运行
kubectl get secret --namespace default redis -o jsonpath="{.data.redis-password}" > encoded.b64,这将创建一个包含您编码密码的文件。接下来,运行certutil -decode encoded.b64 password.txt,这将把您的 Redis 密码放入一个名为password.txt的文本文件中。复制密码并删除这两个文件。Linux/MacOS: 运行
kubectl get secret --namespace default redis -o jsonpath="{.data.redis-password}" | base64 --decode并复制输出的密码。
将此密码作为
redisPassword值添加到您的 redis.yaml 文件中。例如:- name: redisPassword value: "lhDOkwTlp0"
一旦您的实例创建完成,从 Azure 门户获取主机名(FQDN)和您的访问密钥。
- 对于主机名:
- 导航到资源的概览页面。
 - 复制主机名值。
 
 - 对于您的访问密钥:
- 导航到设置 > 访问密钥。
 - 复制并保存您的密钥。
 
 
- 对于主机名:
 将您的密钥和主机名添加到 Dapr 可以应用到您集群的
redis.yaml文件中。- 如果您正在运行示例,请将主机和密钥添加到提供的 
redis.yaml中。 - 如果您从头开始创建项目,请按照组件格式部分中指定的创建 
redis.yaml文件。 
- 如果您正在运行示例,请将主机和密钥添加到提供的 
 将
redisHost键设置为[HOST NAME FROM PREVIOUS STEP]:6379,并将redisPassword键设置为您之前保存的密钥。注意: 在生产级应用程序中,请遵循秘密管理说明以安全管理您的秘密。
启用 EntraID 支持:
- 在您的 Azure Redis 服务器上启用 Entra ID 身份验证。这可能需要几分钟。
 - 将 
useEntraID设置为"true"以实现 Azure Cache for Redis 的 EntraID 支持。 
将
enableTLS设置为"true"以支持 TLS。
注意:
useEntraID假设您的 UserPrincipal(通过 AzureCLICredential)或 SystemAssigned 托管身份具有 RedisDataOwner 角色权限。如果使用用户分配的身份,您需要指定azureClientID属性。
注意
Dapr CLI 在自托管模式下作为dapr init 命令的一部分自动部署本地 redis 实例。