你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

快速入门:将 Azure Cache for Redis 与 Go 配合使用

在本文中,你将了解如何在 Go 应用中构建 REST API,该应用将存储和检索由 Azure Cache for Redis 中的 HASH 数据结构支持的用户信息。

跳转到 GitHub 查看代码

如果要直接跳到代码,请参阅 GitHub 上的 Go 快速入门

先决条件

创建用于 Redis 的 Azure 缓存实例

  1. Azure 门户中,搜索并选择 Azure Redis 缓存

  2. Azure Redis 缓存 页上,选择“ 创建>Azure Redis 缓存”。

  3. “新建 Redis 缓存”页的“基本信息”选项卡上,配置以下设置:

    • 订阅:选择要使用的订阅。
    • 资源组:选择资源组,或选择 “新建 ”并输入新的资源组名称。 将所有应用资源放在同一资源组中即可轻松管理或删除它们。
    • 名称:输入区域中唯一的缓存名称。 名称必须:
      • 必须是 1 到 63 个字符的字符串。
      • 仅包含数字、字母和连字符。
      • 以数字或字母开头和结尾。
      • 不包含连续的连字符。
    • 区域:选择使用缓存的其他服务附近的 Azure 区域
    • 缓存 SKU:选择 SKU 来确定缓存的可用大小、性能和功能。
    • 缓存大小:选择缓存大小。 有关详细信息,请参阅 Azure Cache for Redis 概述

    显示“新建 Redis 缓存”页的“基本信息”选项卡的屏幕截图。

  4. 选择“ 网络 ”选项卡,或选择“ 下一步:网络”。

  5. 在“网络”选项卡上,选择用于缓存的连接方法。 建议使用专用终结点实现安全性。 如果选择 “专用终结点”,请选择“ 添加专用终结点 ”并创建专用终结点。

  6. 选择“ 高级 ”选项卡,或选择“ 下一步:高级”。

  7. “高级 ”窗格中,配置以下选项:

    • 选择 Microsoft Entra 身份验证访问密钥身份验证。 默认情况下,Microsoft Entra Authentication 处于启用状态。
    • 选择是否 启用 非 TLS 端口。
    • 对于高级缓存,可以配置或禁用 可用性区域。 创建缓存后,无法禁用可用性区域。 对于标准缓存,会自动分配可用性区域。 可用性区域不适用于基本 SKU。
    • 对于高级缓存,请配置 副本计数群集分片计数系统分配的托管标识和数据 持久性的设置。

    下图显示了标准 SKU 的 “高级 ”选项卡。

    显示标准 SKU 缓存的高级窗格的屏幕截图。

    重要

    将 Microsoft Entra ID 与托管标识一起使用,以授权针对缓存的请求(如果可能)。 使用 Microsoft Entra ID 和托管标识的授权可提供更好的安全性,并且比共享访问密钥授权更容易使用。 若要详细了解如何将托管标识与缓存配合使用,请参阅使用 Microsoft Entra ID 进行缓存身份验证

  8. (可选)选择“ 标记 ”选项卡或选择“ 下一步:标记”,然后输入标记名称和值以对缓存资源进行分类。

  9. 选择 “查看 + 创建”,验证通过后,选择“ 创建”。

新的缓存部署需要几分钟时间。 可以在门户 Azure Redis 缓存页上监视部署进度。 当缓存 状态 显示 “正在运行”时,缓存可供使用。

从 Azure 门户检索主机名、端口和访问密钥

若要连接到你的 Azure Cache for Redis 服务器,缓存客户端需要该缓存的主机名、端口和密钥。 在某些客户端中,这些项的名称可能略有不同。 可以从 Azure 门户检索主机名、端口和访问密钥。

  • 若要获取缓存的主机名和端口,请从“资源”菜单中选择“概述”。 主机名采用 <DNS name>.redis.cache.windows.net 形式。

    显示 Azure Cache for Redis 属性的屏幕截图。

  • 若要获取访问密钥,请从“资源”菜单中选择“身份验证”。 然后,选择“访问密钥”选项卡

    显示 Azure Cache for Redis 访问密钥的屏幕截图。

查看代码(可选)

如果有意了解代码的工作原理,可以查看以下代码片段。 否则,可以直接跳到运行应用程序

开放源代码 go-redis 库用于与 Azure Cache for Redis 交互。

main 函数首先读取 Azure Cache for Redis 实例的主机名和密码(访问密钥)。

func main() {
    redisHost := os.Getenv("REDIS_HOST")
    redisPassword := os.Getenv("REDIS_PASSWORD")
...

然后,我们会建立与 Azure Cache for Redis 的连接。 我们使用 tls,Config——Azure Cache for Redis 仅接受安全连接,最低版本要求为 TLS 1.2(/azure-cache-for-redis/cache-remove-tls-10-11.md)。

...
op := &redis.Options{Addr: redisHost, Password: redisPassword, TLSConfig: &tls.Config{MinVersion: tls.VersionTLS12}}
client := redis.NewClient(op)

ctx := context.Background()
err := client.Ping(ctx).Err()
if err != nil {
    log.Fatalf("failed to connect with redis instance at %s - %v", redisHost, err)
}
...

如果连接成功,HTTP 处理程序将配置为处理 POSTGET 操作,HTTP 服务器已启动。

注释

gorilla mux 库用于路由(尽管这不是必须的,而且我们可以通过使用这个示例应用程序的标准库来避免这种情况)。

uh := userHandler{client: client}

router := mux.NewRouter()
router.HandleFunc("/users/", uh.createUser).Methods(http.MethodPost)
router.HandleFunc("/users/{userid}", uh.getUser).Methods(http.MethodGet)

log.Fatal(http.ListenAndServe(":8080", router))

userHandler 结构封装了由 createUser 方法使用的 getUser - 为了简洁起见,没有包含这些方法的代码。

  • createUser:接受 JSON 有效负载(包含用户信息)并将其保存为 Azure Cache for Redis 中的 HASH
  • getUser:从 HASH 提取用户信息,如果找不到,则返回 HTTP 404 响应。
type userHandler struct {
    client *redis.Client
}
...

func (uh userHandler) createUser(rw http.ResponseWriter, r *http.Request) {
    // details omitted
}
...

func (uh userHandler) getUser(rw http.ResponseWriter, r *http.Request) {
    // details omitted
}

克隆示例应用程序

首先从 GitHub 克隆应用程序开始。

  1. 打开命令提示符,然后创建一个新的名为 git-samples 的文件夹。

    md "C:\git-samples"
    
  2. 打开 git 终端窗口(例如 git bash)。 使用 cd 命令转到新文件夹,你将在其中克隆示例应用。

    cd "C:\git-samples"
    
  3. 运行下列命令,克隆示例存储库。 此命令在计算机上创建示例应用程序的副本。

    git clone https://github.com/Azure-Samples/azure-redis-cache-go-quickstart.git
    

运行应用程序

应用程序接受环境变量形式的连接和凭据。

  1. Azure 门户中为 Azure Cache for Redis 实例提取“主机名”和“访问密钥”(可通过访问密钥获得)

  2. 将它们设置为相应的环境变量:

    set REDIS_HOST=<Host name>:<port> (e.g. <name of cache>.redis.cache.windows.net:6380)
    set REDIS_PASSWORD=<Primary Access Key>
    
  3. 在“终端”窗口中,切换到正确的文件夹。 例如:

    cd "C:\git-samples\azure-redis-cache-go-quickstart"
    
  4. 在终端中,运行以下命令以启动应用程序。

    go run main.go
    

HTTP 服务器将在端口 8080 上启动。

测试应用程序

  1. 创建一些用户条目。 下面的示例使用 curl:

    curl -i -X POST -d '{"id":"1","name":"foo1", "email":"foo1@baz.com"}' localhost:8080/users/
    curl -i -X POST -d '{"id":"2","name":"foo2", "email":"foo2@baz.com"}' localhost:8080/users/
    curl -i -X POST -d '{"id":"3","name":"foo3", "email":"foo3@baz.com"}' localhost:8080/users/
    
  2. 使用 id 提取现有用户:

    curl -i localhost:8080/users/1
    

    应获得 JSON 响应,如下所示:

    {
        "email": "foo1@bar",
        "id": "1",
        "name": "foo1"
    }
    
  3. 如果尝试提取一个不存在的用户,将收到 HTTP 404。 例如:

    curl -i localhost:8080/users/100
    
    #response
    
    HTTP/1.1 404 Not Found
    Date: Fri, 08 Jan 2021 13:43:39 GMT
    Content-Length: 0
    

清理资源

要继续使用在本文中创建的资源,请保留资源组。

否则,如果您已不再需要使用这些资源,可以删除您创建的 Azure 资源组以避免产生费用。

重要

删除资源组的操作不可逆。 删除资源组时,包含在其中的所有资源会被永久删除。 请确保不会意外删除错误的资源组或资源。 如果在现有资源组(其中包含要保留的资源)内创建了此资源,可以逐个删除这些资源,而不是删除资源组。

删除资源组的步骤

  1. 登录到 Azure 门户,然后选择“资源组”。

  2. 选择要删除的资源组。

    如果有多个资源组,请使用“筛选任何字段...”框,键入为本文创建的资源组的名称。 在结果列表中选择资源组。

    在工作窗格中显示要删除的资源组列表的屏幕截图。

  3. 选择“删除资源组”。

  4. 系统会要求确认是否删除资源组。 键入资源组的名称进行确认,然后选择“删除”。

    显示需要资源名称才能确认删除的表单的屏幕截图。

片刻之后,将会删除该资源组及其所有资源。

后续步骤

本快速入门介绍了如何通过 GO 开始使用 Azure Cache for Redis。 你已配置并运行了一个简单的基于 REST API 的应用程序,以创建和获取由 Redis HASH 数据结构支持的用户信息。