Golang中如何将aws-sdk的elasticache客户端与go-redis配合使用
实现思路说明
首先要明确两个客户端的不同定位,二者不需要做适配改造,职责完全独立:
- AWS SDK 提供的
elasticache客户端是用来管理ElastiCache资源的,比如创建/删除集群、查询集群节点地址、获取自动轮换的密码、查看运行状态这类管控类操作,它本身不会处理Redis的业务读写请求。 go-redis客户端是用来实际和Redis服务做业务数据交互的,比如执行GET/SET这类数据操作,只需要拿到ElastiCache的连接参数就能正常工作。
具体配合使用流程
步骤1:用elasticache客户端获取Redis连接参数
如果你的ElastiCache集群是动态创建、或者需要自动获取连接地址/密码(比如开启了IAM认证、密码自动轮换)的场景,就用elasticache客户端查询对应的参数:
// 调用elasticache api查询指定集群的详情 input := &elasticache.DescribeCacheClustersInput{ CacheClusterId: aws.String("你的ElastiCache集群ID"), ShowCacheNodeInfo: aws.Bool(true), } result, err := svc.DescribeCacheClusters(input) if err != nil { // 自行处理查询错误 panic(err) } // 提取集群的连接地址和端口 cacheNode := result.CacheClusters[0].CacheNodes[0] redisAddr := fmt.Sprintf("%s:%d", *cacheNode.Endpoint.Address, *cacheNode.Endpoint.Port) // 如果开启了密码/ IAM认证,也可以通过对应API获取密码或认证令牌
注意:如果你的ElastiCache开启了传输加密、IAM身份认证,还需要根据配置获取对应的CA证书、认证凭证等参数。
步骤2:用拿到的参数初始化go-redis客户端
把上一步拿到的地址等参数传给go-redis的初始化代码即可,和你之前的用法完全一致:
client := redis.NewClient(&redis.Options{ Addr: redisAddr, // 刚从elasticache客户端拿到的连接地址 Password: "", // 有密码就填入对应获取到的密码 DB: c.dbIndex, }) // 测试连接是否正常 _, err = client.Ping(context.Background()).Result() if err != nil { // 自行处理连接错误 }
- 如果用的是ElastiCache for Redis的集群模式,go-redis需要改用
redis.NewClusterClient初始化,配置对应集群节点地址即可。
常规场景简化方案
如果你的ElastiCache集群是提前创建好、连接地址固定不会频繁变更的,不需要每次都通过elasticache客户端查询参数,直接把连接地址、密码等配置写在配置文件里初始化go-redis即可。只有当你需要做集群管控操作(比如扩缩容、修改配置、自动获取动态密码)的时候,才需要用到elasticache客户端。
内容的提问来源于stack exchange,提问作者Sridhar Chilukuri
相关产品推荐
相关产品推荐

