【⚡ Cache伺服器 - Redis】使用Python輕鬆存取快取伺服器

更新於 發佈於 閱讀時間約 6 分鐘

我們在「【⚡ Cache伺服器 - Redis】 讓系統服務更加順暢的快取機制」 分享如何使用Docker架設Redis, 在進入此篇章之前也請您親自架設一遍, 這樣才能加深學習的效果, 接下來我們會使用Python這套程式語言進行示範與說明, 讓我們以實戰的方式來練習, 將技術內化為知識, 達到真正的學以致用。


重點預告

raw-image



安裝Python的pip套件

pip install redis



連線的單例模式

在存取快取伺服器Redis最重要的莫過於連線了, 如果連線都做不好了, 那後續的操作也不用說了, 因此學會如何連線就顯得非常重要, 這邊我們會搭配物件導向中的單例模式Singleton來設計連線, 讓我們在各模組之間盡情暢用, 避免多次的建立連線!

import redis

class RedisClient:
_instance = None

@classmethod
def get_instance(cls):
if cls._instance is None:
cls._instance = cls._create_connection()
return cls._instance

@classmethod
def _create_connection(cls):
redis_host = 'localhost'
redis_port = 6379
redis_db = 0

try:
client = redis.Redis(
host=redis_host,
port=redis_port,
db=redis_db,
decode_responses=True
)
# 測試連接
client.ping()
return client
except redis.ConnectionError as e:
print(f"Redis連接失敗: {str(e)}")
return None

@classmethod
def reset_instance(cls):
"""重置Redis實例, 用於測試或重新連接"""
if cls._instance:
cls._instance.close()
cls._instance = None



在其他模組只需要這樣用 😌

from xxx.client import RedisClient

redis_client = RedisClient.get_instance()

# 開始操作redis...



幾個重要的參數說明 🐉

  • redis_db:
    • 這個部份是邏輯數據庫的概念,每個數據庫都獨立資料, 避免互相干擾。
    • 用號碼表示: 0 ~ N。
    • 範圍: 預設16個邏輯數據庫。
    • 適用於多租戶、大型系統…。
  • decode_responses:
    • 解碼為utf-8。
    • False: b'value’。
    • True: 'value’。



鍵值

既然Redis主打Key、Value的資料庫系統, 那鍵值Key就格外的重要了,這邊我們先針對Key的規則設計做一個簡介, 雖然我們可以自由的訂定Key值, 但還是參考一些指南對於未來維護上會比較輕鬆一些。

  • 以 : 隔開。
  • <大類>:<子類>:<屬性>
  • order:<order_id>:status


在Python這邊我們可以使用Enum的動態樣板來進行鍵值的設計。

from enum import Enum

class RedisKey(str, Enum):
ORDER_STATUS = 'order:001:{status}'
from types import RedisKey

# order:001:prepare
key = RedisKey.ORDER_STATUS.value.format(status='prepare')


關於這部份, 非常推薦您閱讀以下篇章, 裡面會有詳細的介紹:


簡易請求

這是我們一般使用Redis最簡易的請求方式, 搭配我們上述的連線, 請您親自操作看看。

from xxx.client import RedisClient

redis_client = RedisClient.get_instance()

# 取值
value = redis_client.get('key')

# 存值
redis_client.set('key', 'value')



批次請求

假設我們有一個操作是需要將一捆清單的key、value存放到Redis, 照著我們上述的簡易請求方法, 那會有多次的網路傳輸, 因此我們可以試著將這些動作使用所謂的pipeline, 並一次傳輸給Redis做操作。

# 建立 Pipeline
pipeline = redis_client.pipeline()

# 將多個指令加入 Pipeline
for i in range(5):
pipeline.set(f"key{i}", f"value{i}")

# 執行 Pipeline
pipeline.execute()



結語

操作Redis相對於一般資料庫系統已經簡單的許多了, 但其中還是有一些隱藏的細節值得我們去一一探索, 只有不斷的學習才能夠讓我們避開陷阱, 更好的掌握一套工具, 更有效率的完成任務, 尤其在複雜的大型系統中, 快取的技巧就顯得非常的重要, 我們只要掌握好Redis, 就能夠提昇使用者順暢的體驗, 進而影響客戶對我們系統的評價。

留言
avatar-img
留言分享你的想法!
avatar-img
阿Han的沙龍
131會員
293內容數
哈囉,我是阿Han,是一位 👩‍💻 軟體研發工程師,喜歡閱讀、學習、撰寫文章及教學,擅長以圖代文,化繁為簡,除了幫助自己釐清思路之外,也希望藉由圖解的方式幫助大家共同學習,甚至手把手帶您設計出高品質的軟體產品。
你可能也想看
Thumbnail
家中修繕或裝潢想要找各種小零件時,直接上網採買可以省去不少煩惱~看看Sylvia這回為了工地買了些什麼吧~
Thumbnail
家中修繕或裝潢想要找各種小零件時,直接上網採買可以省去不少煩惱~看看Sylvia這回為了工地買了些什麼吧~
Thumbnail
👜簡單生活,從整理包包開始!我的三款愛用包+隨身小物清單開箱,一起來看看我每天都帶些什麼吧🌿✨
Thumbnail
👜簡單生活,從整理包包開始!我的三款愛用包+隨身小物清單開箱,一起來看看我每天都帶些什麼吧🌿✨
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
我們在「【⚡ Cache伺服器 - Redis】 讓系統服務更加順暢的快取機制」 分享如何使用Docker架設Redis, 在進入此篇章之前也請您親自架設一遍, 這樣才能加深學習的效果, 接下來我們會使用Python這套程式語言進行示範與說明, 讓我們以實戰的方式來練習, 將技術內化為知識, 達到真
Thumbnail
我們在「【⚡ Cache伺服器 - Redis】 讓系統服務更加順暢的快取機制」 分享如何使用Docker架設Redis, 在進入此篇章之前也請您親自架設一遍, 這樣才能加深學習的效果, 接下來我們會使用Python這套程式語言進行示範與說明, 讓我們以實戰的方式來練習, 將技術內化為知識, 達到真
Thumbnail
打開 jupyter notebook 寫一段 python 程式,可以完成五花八門的工作,這是玩程式最簡便的方式,其中可以獲得很多快樂,在現今這種資訊發達的時代,幾乎沒有門檻,只要願意,人人可享用。 下一步,希望程式可以隨時待命聽我吩咐,不想每次都要開電腦,啟動開發環境,只為完成一個重複性高
Thumbnail
打開 jupyter notebook 寫一段 python 程式,可以完成五花八門的工作,這是玩程式最簡便的方式,其中可以獲得很多快樂,在現今這種資訊發達的時代,幾乎沒有門檻,只要願意,人人可享用。 下一步,希望程式可以隨時待命聽我吩咐,不想每次都要開電腦,啟動開發環境,只為完成一個重複性高
Thumbnail
前端 為了實驗我們上傳的 Docker Image 有沒有問題,我們先在學一個刪除本地 Docker Image,刪除 Docker Image 要使用 docker rmi <image> 這個語法,現在開始刪除本地 Docker Image 輸入以下指令 docker rmi timmmmm
Thumbnail
前端 為了實驗我們上傳的 Docker Image 有沒有問題,我們先在學一個刪除本地 Docker Image,刪除 Docker Image 要使用 docker rmi <image> 這個語法,現在開始刪除本地 Docker Image 輸入以下指令 docker rmi timmmmm
Thumbnail
Docker是由GO語言實現,是一個在GitHub上開發原始碼的專案。它的目標是實現羽量級的作業系統虛擬化。讓使用者操作Docker,就像是操作一個羽量級的虛擬機器。 優勢 快速發表和部署 高效的部署和擴充 資源使用率高 管理簡單 核心 Image映像檔 Docker
Thumbnail
Docker是由GO語言實現,是一個在GitHub上開發原始碼的專案。它的目標是實現羽量級的作業系統虛擬化。讓使用者操作Docker,就像是操作一個羽量級的虛擬機器。 優勢 快速發表和部署 高效的部署和擴充 資源使用率高 管理簡單 核心 Image映像檔 Docker
Thumbnail
R036 Blog API 伺服器的維護更新日誌 (2024/04/30) 開發環境技術 語言: Javascript 環境: Node JS 框架: Express.js 本次維護目的 優化及測試API伺服器程運行 重溫程式碼架構以便日後更新優化 Reac
Thumbnail
R036 Blog API 伺服器的維護更新日誌 (2024/04/30) 開發環境技術 語言: Javascript 環境: Node JS 框架: Express.js 本次維護目的 優化及測試API伺服器程運行 重溫程式碼架構以便日後更新優化 Reac
Thumbnail
前言 大家好上次我們教了如何建立自己的 Docker Image,今天我們要來教怎麼把自己做好的 Docker Image 上傳到 Docker Hub,如果以後自己在公司有搭建 Docker Registry,也可以用同樣方式上傳到公司的 Docker Registry 私有倉庫 登入 Doc
Thumbnail
前言 大家好上次我們教了如何建立自己的 Docker Image,今天我們要來教怎麼把自己做好的 Docker Image 上傳到 Docker Hub,如果以後自己在公司有搭建 Docker Registry,也可以用同樣方式上傳到公司的 Docker Registry 私有倉庫 登入 Doc
Thumbnail
前言 大家好上次我們教了如何下載 Docker Image 使用,今天我們要教如何產出自己的 Image,這次會使用一個 Dockerfile 範例,自行打包 Docker Image,初步練習使用 Docker 指令 下載 Dockerfile 教學檔案 在這裡我已經幫忙寫好一個 Docke
Thumbnail
前言 大家好上次我們教了如何下載 Docker Image 使用,今天我們要教如何產出自己的 Image,這次會使用一個 Dockerfile 範例,自行打包 Docker Image,初步練習使用 Docker 指令 下載 Dockerfile 教學檔案 在這裡我已經幫忙寫好一個 Docke
Thumbnail
前言 上次講到 Dockerfile、DockerImage、Docker Container 他們之間的關係,今天我們要來熟悉 Docker Image 如何使用,教你如何抓取雲端上的 Docker Image, Docker Image 下載來源 當我們今天要要使用 Docker Imag
Thumbnail
前言 上次講到 Dockerfile、DockerImage、Docker Container 他們之間的關係,今天我們要來熟悉 Docker Image 如何使用,教你如何抓取雲端上的 Docker Image, Docker Image 下載來源 當我們今天要要使用 Docker Imag
Thumbnail
前言 上次我們初步體驗 Docker 快速佈署能力,今天我們要來講解 Dockerfile、Docker Image 與 Docker Container 這些常見的名詞,我們來了解在我們佈署的時候做哪些事情 Docker 佈署流程 首先看到如下圖上半部,在我們一個完整的佈署流程,我們會先將我
Thumbnail
前言 上次我們初步體驗 Docker 快速佈署能力,今天我們要來講解 Dockerfile、Docker Image 與 Docker Container 這些常見的名詞,我們來了解在我們佈署的時候做哪些事情 Docker 佈署流程 首先看到如下圖上半部,在我們一個完整的佈署流程,我們會先將我
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News