# 範例程式碼

歡迎來到範例程式碼區!這裡收集了各種實用的 Redis Toolkit 使用範例,從基礎到進階,幫助您快速上手。

# 📂 範例分類

🎯 基礎範例

適合初學者的簡單範例

  • Hello World
  • 基本存取操作
  • 資料類型處理
  • 簡單的發布訂閱
查看範例 →

🎨 媒體處理範例

圖片、音頻、視頻處理實例

  • 圖片快取系統
  • 音頻轉換服務
  • 視頻縮圖生成
  • 媒體檔案管理
查看範例 →

💼 實戰案例

真實應用場景的完整實現

  • 用戶系統
  • 即時聊天室
  • 任務隊列
  • 快取系統
查看範例 →

# 🚀 快速開始範例

# Hello Redis Toolkit

from redis_toolkit import RedisToolkit

# 初始化
toolkit = RedisToolkit()

# 存儲資料
toolkit.setter("greeting", "Hello, Redis Toolkit!")

# 讀取資料
message = toolkit.getter("greeting")
print(message)  # Hello, Redis Toolkit!

# 存儲複雜資料
user = {
    "id": 1,
    "name": "Alice",
    "scores": [95, 87, 92]
}
toolkit.setter("user:1", user)

# 自動反序列化
retrieved_user = toolkit.getter("user:1")
print(f"{retrieved_user['name']} 的分數: {retrieved_user['scores']}")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

# 📱 實用小範例

# 計數器

class Counter:
    def __init__(self, name):
        self.toolkit = RedisToolkit()
        self.key = f"counter:{name}"
    
    def increment(self):
        current = self.toolkit.getter(self.key) or 0
        self.toolkit.setter(self.key, current + 1)
        return current + 1
    
    def get(self):
        return self.toolkit.getter(self.key) or 0
    
    def reset(self):
        self.toolkit.setter(self.key, 0)

# 使用範例
page_views = Counter("page_views")
page_views.increment()
print(f"瀏覽次數: {page_views.get()}")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

# 簡單快取

import time

def cached(key, ttl=300):
    """快取裝飾器"""
    def decorator(func):
        def wrapper(*args, **kwargs):
            toolkit = RedisToolkit()
            
            # 嘗試從快取獲取
            cached_result = toolkit.getter(key)
            if cached_result is not None:
                return cached_result
            
            # 執行函數並快取結果
            result = func(*args, **kwargs)
            toolkit.setter(key, result, ex=ttl)
            return result
        
        return wrapper
    return decorator

# 使用範例
@cached("expensive_calculation", ttl=600)
def calculate_something():
    print("執行昂貴的計算...")
    time.sleep(2)  # 模擬耗時操作
    return {"result": 42}

# 第一次呼叫會執行計算
result1 = calculate_something()

# 後續呼叫直接返回快取
result2 = calculate_something()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

# 排行榜

class Leaderboard:
    def __init__(self, name):
        self.toolkit = RedisToolkit()
        self.key = f"leaderboard:{name}"
    
    def add_score(self, player, score):
        """添加或更新玩家分數"""
        self.toolkit.client.zadd(self.key, {player: score})
    
    def get_top(self, count=10):
        """獲取前 N 名"""
        top_players = self.toolkit.client.zrevrange(
            self.key, 0, count-1, withscores=True
        )
        return [(p.decode(), int(s)) for p, s in top_players]
    
    def get_rank(self, player):
        """獲取玩家排名"""
        rank = self.toolkit.client.zrevrank(self.key, player)
        return rank + 1 if rank is not None else None

# 使用範例
game_scores = Leaderboard("game_2024")

# 添加分數
game_scores.add_score("Alice", 1500)
game_scores.add_score("Bob", 1200)
game_scores.add_score("Charlie", 1800)

# 獲取排行榜
top_3 = game_scores.get_top(3)
for i, (player, score) in enumerate(top_3, 1):
    print(f"{i}. {player}: {score} 分")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

# 🎯 學習路徑建議

# 初學者路線

  1. 基礎操作 → 從 Hello World 開始
  2. 資料類型 → 了解序列化功能
  3. 簡單應用 → 實作計數器、快取
  4. 發布訂閱 → 嘗試訊息傳遞

# 進階路線

  1. 批次操作 → 提升效能
  2. 媒體處理 → 處理圖片音頻
  3. 錯誤處理 → 建立穩定系統
  4. 實戰專案 → 完整應用開發

# 💡 範例使用技巧

# 1. 複製並修改

所有範例都可以直接複製使用,根據需求修改:

# 複製範例程式碼
# 修改配置參數
# 調整業務邏輯
# 添加錯誤處理
1
2
3
4

# 2. 組合使用

不同範例可以組合使用:

# 結合快取 + 計數器
class CachedCounter(Counter):
    def increment(self):
        result = super().increment()
        # 清除相關快取
        self.toolkit.client.delete("stats:cache")
        return result
1
2
3
4
5
6
7

# 3. 性能測試

在範例基礎上進行性能測試:

import time

def benchmark(func, iterations=1000):
    start = time.time()
    for _ in range(iterations):
        func()
    elapsed = time.time() - start
    print(f"執行 {iterations} 次耗時: {elapsed:.3f} 秒")
    print(f"平均每次: {elapsed/iterations*1000:.2f} 毫秒")

# 測試範例
benchmark(lambda: toolkit.setter("test", "value"))
1
2
3
4
5
6
7
8
9
10
11
12

# 📚 完整範例專案

# 迷你部落格系統

結合多個功能的完整範例:

class MiniBlog:
    def __init__(self):
        self.toolkit = RedisToolkit()
    
    def create_post(self, author, title, content):
        """創建文章"""
        post_id = self.toolkit.client.incr("post:id")
        post = {
            "id": post_id,
            "author": author,
            "title": title,
            "content": content,
            "created_at": time.time(),
            "views": 0
        }
        
        # 儲存文章
        self.toolkit.setter(f"post:{post_id}", post)
        
        # 添加到文章列表
        self.toolkit.client.lpush("posts:recent", post_id)
        
        # 更新作者的文章列表
        self.toolkit.client.sadd(f"author:{author}:posts", post_id)
        
        return post_id
    
    def get_post(self, post_id):
        """獲取文章並增加瀏覽次數"""
        key = f"post:{post_id}"
        post = self.toolkit.getter(key)
        
        if post:
            # 增加瀏覽次數
            post["views"] += 1
            self.toolkit.setter(key, post)
        
        return post
    
    def get_recent_posts(self, count=10):
        """獲取最近的文章"""
        post_ids = self.toolkit.client.lrange("posts:recent", 0, count-1)
        posts = []
        
        for pid in post_ids:
            post = self.toolkit.getter(f"post:{int(pid)}")
            if post:
                posts.append(post)
        
        return posts

# 使用範例
blog = MiniBlog()

# 創建文章
post_id = blog.create_post(
    author="Alice",
    title="Redis Toolkit 使用心得",
    content="這是一個很棒的工具..."
)

# 讀取文章
post = blog.get_post(post_id)
print(f"《{post['title']}》已被瀏覽 {post['views']} 次")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64

# 🔗 相關資源

# 🎯 下一步

選擇您感興趣的範例類別開始探索:

提示

  • 所有範例都經過測試,可以直接運行
  • 建議先閱讀程式碼,理解邏輯後再運行
  • 遇到問題可以查看疑難排解