Redis

Redis 锁组件的详细介绍

组件格式

要配置 Redis 锁,需要创建一个类型为 lock.redis 的组件。请参阅本指南了解如何创建锁。

apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
  name: <NAME>
spec:
  type: lock.redis
  version: v1
  metadata:
  - name: redisHost
    value: <HOST>
  - name: redisPassword #可选。
    value: <PASSWORD>
  - name: useEntraID
    value: <bool> # 可选。允许值:true, false。
  - name: enableTLS
    value: <bool> # 可选。允许值:true, false。
  - name: failover
    value: <bool> # 可选。允许值:true, false。
  - name: sentinelMasterName
    value: <string> # 可选
  - name: maxRetries
    value: # 可选
  - name: maxRetryBackoff
    value: # 可选
  - name: failover
    value: # 可选
  - name: sentinelMasterName
    value: # 可选
  - name: redeliverInterval
    value: # 可选
  - name: processingTimeout
    value: # 可选
  - name: redisType
    value: # 可选
  - name: redisDB
    value: # 可选
  - name: redisMaxRetries
    value: # 可选
  - name: redisMinRetryInterval
    value: # 可选
  - name: redisMaxRetryInterval
    value: # 可选
  - name: dialTimeout
    value: # 可选
  - name: readTimeout
    value: # 可选
  - name: writeTimeout
    value: # 可选
  - name: poolSize
    value: # 可选
  - name: poolTimeout
    value: # 可选
  - name: maxConnAge
    value: # 可选
  - name: minIdleConns
    value: # 可选
  - name: idleCheckFrequency
    value: # 可选
  - name: idleTimeout
    value: # 可选

规格元数据字段

字段必需详细信息示例
redisHostYRedis 主机的连接字符串localhost:6379, redis-master.default.svc.cluster.local:6379
redisPasswordNRedis 主机的密码。无默认值。可以是 secretKeyRef 以使用 secret 引用"", "KeFg23!"
redisUsernameNRedis 主机的用户名。默认为空。确保您的 Redis 服务器版本为 6 或更高,并正确创建了 ACL 规则。"", "default"
useEntraIDN为 Azure Cache for Redis 实现 EntraID 支持。启用此功能之前:
  • redisHost 名称必须以 "server:port" 的形式指定
  • 必须启用 TLS
创建 Redis 实例 > Azure Cache for Redis下了解有关此设置的更多信息
"true", "false"
enableTLSN如果 Redis 实例支持带有公共证书的 TLS,可以配置为启用或禁用。默认为 "false""true", "false"
maxRetriesN放弃前的最大重试次数。默认为 35, 10
maxRetryBackoffN每次重试之间的最大退避时间。默认为 2 秒;"-1" 禁用退避。3000000000
failoverN启用故障转移配置的属性。需要设置 sentinelMasterName。redisHost 应为哨兵主机地址。请参阅 Redis Sentinel 文档。默认为 "false""true", "false"
sentinelMasterNameN哨兵主名称。请参阅 Redis Sentinel 文档"mymaster"
redeliverIntervalN检查待处理消息以重新传递的间隔。默认为 "60s""0" 禁用重新传递。"30s"
processingTimeoutN消息必须待处理的时间量,然后才尝试重新传递。默认为 "15s""0" 禁用重新传递。"30s"
redisTypeNRedis 的类型。有两个有效值,一个是单节点模式的 "node",另一个是 Redis 集群模式的 "cluster"。默认为 "node""cluster"
redisDBN连接到 Redis 后选择的数据库。如果 "redisType""cluster",此选项将被忽略。默认为 "0""0"
redisMaxRetriesNmaxRetries 的别名。如果同时设置了两个值,则忽略 maxRetries"5"
redisMinRetryIntervalNRedis 命令每次重试之间的最小退避时间。默认为 "8ms""-1" 禁用退避。"8ms"
redisMaxRetryIntervalNmaxRetryBackoff 的别名。如果同时设置了两个值,则忽略 maxRetryBackoff"5s"
dialTimeoutN建立新连接的拨号超时时间。默认为 "5s""5s"
readTimeoutN套接字读取的超时时间。如果达到,Redis 命令将因超时而失败,而不是阻塞。默认为 "3s""-1" 表示无超时。"3s"
writeTimeoutN套接字写入的超时时间。如果达到,Redis 命令将因超时而失败,而不是阻塞。默认为 readTimeout。"3s"
poolSizeN最大套接字连接数。默认是每个 CPU 10 个连接,由 runtime.NumCPU 报告。"20"
poolTimeoutN如果所有连接都忙,客户端在返回错误前等待连接的时间量。默认是 readTimeout + 1 秒。"5s"
maxConnAgeN客户端退役(关闭)连接的连接年龄。默认是不关闭老化连接。"30m"
minIdleConnsN为避免与创建新连接相关的性能下降,保持打开的最小空闲连接数。默认为 "0""2"
idleCheckFrequencyN空闲连接清理器进行空闲检查的频率。默认为 "1m""-1" 禁用空闲连接清理器。"-1"
idleTimeoutN客户端关闭空闲连接的时间量。应小于服务器的超时时间。默认为 "5m""-1" 禁用空闲超时检查。"10m"

设置 Redis

Dapr 可以使用任何 Redis 实例:容器化的、在本地开发机器上运行的或托管的云服务。


当您运行 dapr init 时,会自动创建一个作为 Docker 容器的 Redis 实例


您可以使用 Helm 在我们的 Kubernetes 集群中快速创建一个 Redis 实例。此方法需要安装 Helm

  1. 将 Redis 安装到您的集群中。请注意,我们显式设置了一个镜像标签以获取版本大于 5 的版本,这是 Dapr 的 pubsub 功能所需的。如果您打算仅将 Redis 用作状态存储(而不是用于 pubsub),则无需设置镜像版本。

    helm repo add bitnami https://charts.bitnami.com/bitnami
    helm install redis bitnami/redis --set image.tag=6.2
    
  2. 运行 kubectl get pods 查看现在在您的集群中运行的 Redis 容器。

  3. 在您的 redis.yaml 文件中将 redis-master:6379 添加为 redisHost。例如:

        metadata:
        - name: redisHost
          value: redis-master:6379
    
  4. 接下来,获取 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 文件中。例如:

        metadata:
        - name: redisPassword
          value: lhDOkwTlp0
    

  1. 使用官方 Microsoft 文档创建 Azure Cache for Redis 实例。

  2. 创建实例后,从 Azure 门户获取主机名(FQDN)和访问密钥。

    • 对于主机名:
      • 导航到资源的概览页面。
      • 复制主机名值。
    • 对于访问密钥:
      • 导航到设置 > 访问密钥
      • 复制并保存您的密钥。
  3. 将您的密钥和主机名添加到 Dapr 可以应用于您的集群的 redis.yaml 文件中。

    • 如果您正在运行示例,请将主机和密钥添加到提供的 redis.yaml 中。
    • 如果您从头开始创建项目,请按照组件格式部分中指定的创建 redis.yaml 文件。
  4. redisHost 键设置为 [HOST NAME FROM PREVIOUS STEP]:6379,并将 redisPassword 键设置为您之前保存的密钥。

    注意: 在生产环境中,请遵循秘密管理说明以安全管理您的 secret。

  5. 启用 EntraID 支持:

    • 在您的 Azure Redis 服务器上启用 Entra ID 身份验证。这可能需要几分钟。
    • useEntraID 设置为 "true" 以实现 Azure Cache for Redis 的 EntraID 支持。
  6. enableTLS 设置为 "true" 以支持 TLS。

注意:useEntraID 假定您的 UserPrincipal(通过 AzureCLICredential)或 SystemAssigned 托管身份具有 RedisDataOwner 角色权限。如果使用用户分配的身份,您需要指定 azureClientID 属性

相关链接