共用方式為


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

在本快速入門中,您會將 Azure 受控 Redis 或 Azure Cache for Redis 納入 Python 腳本,以存取可從 Azure 內任何應用程式存取的安全專用快取。

跳至 GitHub 上的程式碼

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

先決條件

建立 Azure 受控 Redis 實例

  1. 若要建立 Azure 受控 Redis 實例,請登入 Azure 入口網站,然後選取 [ 建立資源]。

  2. 在 [ 新增 ] 頁面上的搜尋方塊中,輸入 Azure Cache for Redis

  3. 在 [ 新增 Redis 快取] 索引標籤上,在 [基本] 上設定新快取的設定。

    設定 選擇值 說明
    訂閱 下拉並選取您的訂用帳戶。 要在其中建立這個新 Azure 受控 Redis 實例的訂用帳戶。
    資源群組 下拉並選取資源群組,或選取 [新建] 並輸入新的資源群組名稱。 用來建立快取和其他資源的資源群組名稱。 將所有的應用程式資源放在一個資源群組中,您將可輕鬆地一併管理或刪除這些資源。
    名稱 輸入區域中唯一的名稱。 當快取名稱與快取的區域名稱合併 (只包含數字、字母或連字號) 時,必須為介於 1 到 63 個字元之間的字串。 (如果快取名稱長度少於 45 個字元,則應該適用於所有目前可用的區域。名稱必須以數位或字母開頭和結尾,且不能包含連續連字元。 快取執行個體的主機名稱\<DNS name\>.\<Azure region\>.redis.azure.net
    區域 下拉並選取位置。 Azure 受控 Redis 可在選取的 Azure 區域中取得。
    數據層 選取內存以提供高效能,或選取效能較低的Flash快取 記憶體內部層包括 平衡記憶體優化計算優化。 使用 Flash 層來使用記憶體內部 (RAM) 和磁碟上的 (SSD) 資料記憶體。
    快取大小 下拉選單並選取大小。 快取大小取決於階層。 最小的尺寸是平衡等級。 記憶體內部層大小最大的是記憶體優化層。
    效能 打開下拉選單並選取效能偏好。 效能取決於 vCPU 的數目。 vCPU 數目會隨著層級而有所不同。 計算最佳化類型具有最多的虛擬CPU。

    如需選擇正確效能層級的指引,請參閱 選擇正確的層級

    這很重要

    使用超過 120 GB 記憶體的所有記憶體內部層都處於公開預覽狀態,包括記憶體優化 M150 和更新版本;平衡 B150 和更新版本;和計算優化 X150 和更新版本。 所有這些層級和更高層級都處於公開預覽狀態。

    所有 Flash 優化層都處於公開預覽狀態。

  4. 選取 [下一步:網络] ,然後選取 [公用端點 ] 或 [ 私人端點]。

  5. 選取 [下一步:主動式異地複寫]。 若要使用主動式異地復寫功能,必須在布建期間啟用此功能。 沒有作用中異地復寫的快取無法被新增或稍後加入作用中異地復寫群組。 如需詳細資訊,請參閱 設定 Azure 受控 Redis 實例的作用中異地複寫。

  6. 選取 [ 下一步:進階 ] 索引標籤。

    設定您想要新增至 實例的任何 Redis 模組

    根據預設,針對新的受控快取:

    • Microsoft已啟用 Entra 識別碼。
    • 基於安全性考慮,存取金鑰驗證 已停用。

    這很重要

    為了獲得最佳安全性,建議您盡可能使用 Microsoft Entra ID 搭配受控識別來授權對快取的要求。 使用 Microsoft Entra 識別碼和受控識別進行授權,可提供優於共用存取密鑰授權的安全性與使用便利性。 如需搭配快取使用受控識別的詳細資訊,請參閱 使用 Microsoft Entra ID 進行快取驗證

    設定 叢集原則

    • 使用 Enterprise 以使用 RedisSearch 或其他模組
    • 針對叢集快取使用 OSS
    • 針對非叢集快取使用非叢集式(預覽版)。

    如需選擇 叢集原則的詳細資訊,請參閱 叢集原則

    這很重要

    建立 Azure 受控 Redis 實例之後,您無法變更叢集原則。 如果您使用 RediSearch,則需要企業叢集原則,而且 NoEviction 是唯一支援的收回原則。

    這很重要

    如果您在異地復寫群組中使用這個快取實例,在建立實例之後就無法變更收回原則。 建立快取之前,請務必了解主要節點的收回原則。 如需主動式異地復寫的詳細資訊,請參閱 作用中異地復寫必要條件

    這很重要

    建立快取實例之後,您無法變更模組。 您必須在建立 Azure Cache for Redis 執行個體時啟用模組。 建立快取之後,沒有選項可啟用模組的設定。

  7. 選取 [下一步:標記] 並略過。

  8. 選取 下一步:檢閱 + 建立

  9. 檢閱設定並選取 [建立]

    Redis 實例需要幾分鐘的時間才能建立。 您可以在 Azure 受控 Redis 概觀 頁面上監視進度。 當 [狀態] 顯示為 [執行中] 時,表示快取已可供使用。

建立 Azure Cache for Redis 執行個體

  1. Azure 入口網站中,搜尋並選取 [Azure Cache for Redis]。

  2. [Azure Cache for Redis] 頁面上,選取 [建立>Azure Cache for 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 識別碼搭配受管理的身分,以授權對快取的存取要求。 使用 Microsoft Entra ID 和受控識別的授權可提供更佳的安全性,而且比共用存取密鑰授權更容易使用。 如需搭配快取使用受控識別的詳細資訊,請參閱 使用 Microsoft Entra ID 進行快取驗證

  8. 或者,選取 [標籤] 索引標籤或選取 [下一步:標籤],然後輸入標籤名稱和值以分類您的快取資源。

  9. 選取 [檢閱 + 建立],一旦通過驗證,請選取 [ 建立]。

新的快取部署需要幾分鐘的時間。 您可以在入口網站 Azure Cache for Redis 頁面上監視部署進度。 當快取 狀態 顯示 [ 執行中] 時,快取即可供使用。

安裝 redis-py 程式庫

Redis-py 是 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 受控 Redis 實例。 建議您使用 Microsoft Entra ID。

在快取上使用Microsoft Entra ID 驗證

Azure 受控 Redis 快取預設會啟用Microsoft Entra Authentication。

  1. 在 Azure 入口網站 中,選取您想要使用 Microsoft Entra 令牌型驗證的快取。

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

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

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

如需搭配 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>.<region>.redis.azure.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 = 10000
    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 受管 Redis 實例的值。 您的主機名稱格式為 <DNS name>.<region>.redis.azure.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 = 10000
    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 指令碼。

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

建立 Python 指令碼以存取快取

建立 Python 腳本,以使用 Microsoft Entra ID 或存取密鑰來連線到您的 Redis 實例。 建議您使用 Microsoft Entra ID。

在快取上使用Microsoft Entra ID 驗證

Azure 受控 Redis 快取預設會啟用Microsoft Entra Authentication。

  1. 在 Azure 入口網站 中,選取您想要使用 Microsoft Entra 令牌型驗證的快取。

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

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

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

如需搭配 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. 系統將會要求您確認是否刪除資源群組。 輸入您的資源群組名稱以進行確認,然後選取 [刪除]

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

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