共用方式為


快速入門:在 Python 中使用 Azure Cache for Redis

在本快速入門中,您會將 Azure Cache for Redis 納入 Python 指令碼中,以便存取可從 Azure 內任何應用程式存取的安全、專用快取。

跳至 GitHub 上的程式碼

如果要直接跳到程式碼,請參閱 GitHub 上的 Python 快速入門

必要條件

建立 Azure Cache for Redis 執行個體

  1. 若要建立快取,請登入 Azure 入口網站,然後選取 [建立資源]

    [建立資源] 已在左側導覽窗格中醒目提示。

  2. 在 [開始] 頁面上,於搜尋方塊中輸入 [Azure Cache for Redis]。 然後,選取 [建立]

    Azure Marketplace 的螢幕擷取畫面,搜尋方塊中有 [Azure Cache for Redis],並以紅框反白顯示 [建立]。

  3. 在 [新 Azure Cache for Redis] 頁面上,設定快取的設定。

    設定 選擇值 描述
    訂用帳戶 下拉並選取您的訂用帳戶。 這個新的 Azure Cache for Redis 執行個體建立所在的訂用帳戶。
    資源群組 下拉並選取資源群組,或選取 [新建] 並輸入新的資源群組名稱。 用來建立快取和其他資源的資源群組名稱。 將所有的應用程式資源放在一個資源群組中,您將可輕鬆地一併管理或刪除這些資源。
    DNS 名稱 輸入唯一名稱。 快取名稱必須為介於 1 到 63 個字元之間的字串,而且只能包含數字、字母或連字號。 名稱的開頭和結尾必須是數字或字母,且不可包含連續的連字號。 快取執行個體的「主機名稱」<DNS 名稱>.redis.cache.windows.net
    地點 下拉並選取位置。 選取一個區域,其靠近其他要使用您快取的服務。
    快取 SKU 下拉並選取一個 SKU SKU 會決定快取可用的大小、效能和功能參數。 如需詳細資訊,請參閱 Azure Cache for Redis 概觀
    快取大小 下拉並選取快取的大小 如需詳細資訊,請參閱 Azure Cache for Redis 概觀
  4. 選取 [網路] 索引標籤,或選取頁面底部的 [網路] 按鈕。

  5. 在 [網路功能] 索引標籤中,選取您的連線方法。

  6. 選取 [下一步: 進階] 索引標籤,或選取頁面底部的 [下一步: 進階] 按鈕以查看 [進階] 索引標籤。

    顯示工作窗格中的 [進階] 索引標籤,以及可供選取可用選項的螢幕擷取畫面。

    • 針對基本或標準快取,切換適用於非 TLS 連接埠的選取項目。 您也可以選取是否要啟用 Microsoft Entra 驗證
    • 針對進階快取,設定適用於非 TLS 連接埠、叢集、受控識別和資料持續性的設定。 您也可以選取是否要啟用 Microsoft Entra 驗證

    重要

    為了實現最佳安全性,Microsoft 建議盡可能使用具有受控識別的 Microsoft Entra ID 來授權針對快取的請求。 相較於共用金鑰授權,使用 Microsoft Entra ID 和受控識別來授權可提供更優異的安全性,也更容易使用。 如需搭配快取使用受控識別的詳細資訊,請參閱使用 Microsoft Entra ID 進行快取驗證

  7. 選取 [下一步: 標記] 索引標籤,或選取頁面底部的 [下一步: 標記] 按鈕。

  8. 在 [標記] 索引標籤中,如果您想要分類資源,可以選擇性地輸入名稱和值。

  9. 選取 [檢閱 + 建立]。 您會移至 [檢閱 + 建立] 索引標籤,其中 Azure 會驗證您的設定。

  10. 出現綠色的「通過驗證」訊息之後,請選取 [建立]

建立快取需要一些時間。 您可以在 Azure Cache for Redis 的 [概觀] 頁面上監視進度。 當 [狀態] 顯示為 [執行中] 時,表示快取已可供使用。

安裝 redis-py 程式庫

redis-py \(英文\) 是 Azure Cache for Redis 的 Python 介面。 使用 Python 套件工具 pip,從命令提示字元安裝 redis-py 套件。

下列範例使用 Python 3 的 pip3,在 Windows 10 上,從系統管理員命令提示字元安裝 redis-py

終端的螢幕擷取畫面,其中顯示將 redis-py 介面安裝至 Azure Cache for Redis。

建立 Python 指令碼以存取快取

建立 Python 指令碼,以使用 Microsoft Entra ID 或存取密鑰來連線到 Azure Cache for Redis。 建議您使用 Microsoft Entra ID。

在快取上啟用 Microsoft Entra ID 驗證

如果您已經有快取,請先查看是否已啟用 Microsoft Entra 驗證。 若未啟用,請加以啟用。 建議您針對應用程式使用 Microsoft Entra ID。

  1. 在 Azure 入口網站中,選取 Azure Cache for Redis 執行個體,您想要在其中使用 Microsoft Entra 權杖型驗證。

  2. 從 [資源] 功能表中選取 [驗證]

  3. 簽入工作窗格,以查看是否已核取 [啟用 Microsoft Entra 驗證]。 若是如此,您可以繼續進行。

  4. 選取 [啟用 Microsoft Entra 驗證],然後輸入有效使用者的名稱。 當您選取 [儲存] 時,您輸入的使用者預設會自動獲指派「資料擁有者存取原則」。 您也可以輸入受控識別或服務主體,以連線到快取執行個體。

    此螢幕擷取畫面顯示資源功能表中選取的驗證,並已核取 [啟用 Microsoft Entra 驗證]。

  5. 隨即會顯示快顯對話方塊,詢問您是否要更新設定,並告知您此作業需要幾分鐘的時間。 選取 [是]

    重要

    一旦啟用作業完成,快取執行個體中的節點就會重新啟動以載入新的設定。 建議您在維護視窗期間或在忙碌的上班時間之外執行這項作業。 此作業最多可能需要 30 分鐘的時間。

如需搭配 Azure CLI 使用 Microsoft Entra ID 的詳細資訊,請參閱身分識別的參考頁面

安裝 Microsoft 驗證程式庫

  1. 安裝 Microsoft 驗證程式庫 (MSAL)。 此程式庫可讓您從 Microsoft 身分識別取得安全性權杖,以驗證使用者。

  2. 您可使用可用的 Python Azure 身分識別用戶端程式庫,其使用 MSAL 來提供權杖驗證支援。 使用 pip 來安裝此程式庫:

pip install azure-identity

使用 Microsoft Entra ID 建立 Python 指令碼

  1. 建立新的文字檔、新增下列指令碼,然後將檔案儲存為 PythonApplication1.py

  2. <Your Host Name> 取代為您 Azure Cache for Redis 執行個體的值。 您的主機名稱格式為 <DNS name>.redis.cache.windows.net

  3. <Your Username> 取代為您的 Microsoft Entra ID 使用者的值。

    import redis
    from azure.identity import DefaultAzureCredential
    
    scope = "https://redis.azure.com/.default"
    host = "<Your Host Name>"
    port = 6380
    user_name = "<Your Username>"
    
    
    def hello_world():
        cred = DefaultAzureCredential()
        token = cred.get_token(scope)
        r = redis.Redis(host=host,
                        port=port,
                        ssl=True,    # ssl connection is required.
                        username=user_name,
                        password=token.token,
                        decode_responses=True)
        result = r.ping()
        print("Ping returned : " + str(result))
    
        result = r.set("Message", "Hello!, The cache is working with Python!")
        print("SET Message returned : " + str(result))
    
        result = r.get("Message")
        print("GET Message returned : " + result)
    
        result = r.client_list()
        print("CLIENT LIST returned : ")
        for c in result:
            print(f"id : {c['id']}, addr : {c['addr']}")
    
    if __name__ == '__main__':
        hello_world()
    
  4. 從終端執行 Python 程式碼之前,請確定您授權終端使用 Microsoft Entra ID。

    azd auth login

  5. 使用 Python 執行 PythonApplication1.py。 您應該會看到類似下列範例的結果:

    終端的螢幕擷取畫面,其中顯示用來測試快取存取的 Python 指令碼。

使用重新驗證建立 Python 指令碼

Microsoft Entra ID 存取權杖的存留期有限,平均 75 分鐘。 若要維護快取的連線,您必須重新整理權杖。 此範例示範如何使用 Python 來執行這項操作。

  1. 建立新的文字檔,新增下列指令碼。 然後,將檔案儲存為 PythonApplication2.py

  2. <Your Host Name> 取代為您 Azure Cache for Redis 執行個體的值。 您的主機名稱格式為 <DNS name>.redis.cache.windows.net

  3. <Your Username> 取代為您的 Microsoft Entra ID 使用者的值。

    import time
    import logging
    import redis
    from azure.identity import DefaultAzureCredential
    
    scope = "https://redis.azure.com/.default"
    host = "<Your Host Name>"
    port = 6380
    user_name = "<Your Username>"
    
    def re_authentication():
        _LOGGER = logging.getLogger(__name__)
        cred = DefaultAzureCredential()
        token = cred.get_token(scope)
        r = redis.Redis(host=host,
                        port=port,
                        ssl=True,   # ssl connection is required.
                        username=user_name,
                        password=token.token,
                        decode_responses=True)
        max_retry = 3
        for index in range(max_retry):
            try:
                if _need_refreshing(token):
                    _LOGGER.info("Refreshing token...")
                    tmp_token = cred.get_token(scope)
                    if tmp_token:
                        token = tmp_token
                    r.execute_command("AUTH", user_name, token.token)
                result = r.ping()
                print("Ping returned : " + str(result))
    
                result = r.set("Message", "Hello!, The cache is working with Python!")
                print("SET Message returned : " + str(result))
    
                result = r.get("Message")
                print("GET Message returned : " + result)
    
                result = r.client_list()
                print("CLIENT LIST returned : ")
                for c in result:
                    print(f"id : {c['id']}, addr : {c['addr']}")
                break
            except redis.ConnectionError:
                _LOGGER.info("Connection lost. Reconnecting.")
                token = cred.get_token(scope)
                r = redis.Redis(host=host,
                                port=port,
                                ssl=True,   # ssl connection is required.
                                username=user_name,
                                password=token.token,
                                decode_responses=True)
            except Exception:
                _LOGGER.info("Unknown failures.")
                break
    
    
    def _need_refreshing(token, refresh_offset=300):
        return not token or token.expires_on - time.time() < refresh_offset
    
    if __name__ == '__main__':
        re_authentication()
    
  4. 使用 Python 執行 PythonApplication2.py。 您應該會看到類似下列範例的結果:

    終端的螢幕擷取畫面,其中顯示用來測試快取存取的 Python 指令碼。

    不同於第一個範例,如果您的權杖過期,此範例會自動重新整理該權杖。

清除資源

如果您想要繼續使用在本文中建立的資源,請保留該資源群組。

否則,若已完成資源使用,則可刪除您建立的 Azure 資源群組,以避免衍生費用。

重要

刪除資源群組是無法回復的動作。 當您刪除資源群組時,其中包含的所有資源都將永久刪除。 請確定您不會不小心刪除錯誤的資源群組或資源。 如果您是在包含需保留資源的現有資源群組內部建立資源,則可以個別刪除每個資源,而不必刪除整個資源群組。

刪除資源群組

  1. 登入 Azure 入口網站,然後選取 [資源群組]

  2. 選取您想要刪除的資源群組。

    如果有許多資源群組,請使用 [篩選任何欄位] 方塊,並輸入您針對本文所建立資源群組的名稱。 選取結果清單中的資源群組。

    此螢幕擷取畫面顯示工作窗格中要刪除的資源群組清單。

  3. 選取 [刪除資源群組]

  4. 系統將會要求您確認是否刪除資源群組。 輸入您的資源群組名稱以進行確認,然後選取 [刪除]

    此螢幕擷取畫面顯示需要資源名稱才能確認刪除的表單。

不久後,系統便會刪除該資源群組及其所有的資源。