[golang] redis 使用

 Golang 中,可以使用 go-redis 套件來操作 Redis。以下是 go-redis/v9 的基本使用方式,包括 連線、設定/取得鍵值、刪除、訂閱/發布、儲存結構體 等。


安裝 Redis 套件

在專案目錄下執行:

go get github.com/redis/go-redis/v9

Redis 連線

package main import (
"context"
"fmt"
"log"
"github.com/redis/go-redis/v9"
) // Redis 客戶端
var ctx = context.Background()
var rdb *redis.Client func InitRedis() {
rdb = redis.NewClient(&redis.Options{
Addr: "localhost:6379", // Redis 伺服器地址
Password: "", // 若有設定密碼,則填寫密碼,否則為 ""
DB: 0, // 使用的資料庫,預設為 0
})
// 測試連線
_, err := rdb.Ping(ctx).Result()
if err != nil {
log.Fatalf("❌ Redis 連線失敗: %v", err)
} else {
fmt.Println("✅ Redis 連線成功!")
}
} func main() {
InitRedis()
}


設定 & 取得 Key

func SetValue() {
err := rdb.Set(ctx, "mykey", "Hello Redis!", 0).Err()
if err != nil {
log.Fatalf("❌ 設定失敗: %v", err)
} else {
fmt.Println("✅ 設定成功!")
}
} func GetValue() {
val, err := rdb.Get(ctx, "mykey").Result()
if err == redis.Nil {
fmt.Println("🔸 Key 不存在")
} else if err != nil {
log.Fatalf("❌ 取得失敗: %v", err)
} else {
fmt.Println("✅ 取得值:", val)
}
} func main() {
InitRedis()
SetValue()
GetValue()
}


刪除 Key

func DeleteKey() {
err := rdb.Del(ctx, "mykey").Err()
if err != nil {
log.Fatalf("❌ 刪除失敗: %v", err)
} else {
fmt.Println("✅ 刪除成功!")
}
}


訂閱/發布 (Pub/Sub)

發布消息 (PUBLISH)

func PublishMessage() {
err := rdb.Publish(ctx, "mychannel", "這是一條 Redis 訊息").Err()
if err != nil {
log.Fatalf("❌ 發布失敗: %v", err)
} else {
fmt.Println("✅ 發布成功!")
}
}

訂閱消息 (SUBSCRIBE)

func SubscribeMessage() {
sub := rdb.Subscribe(ctx, "mychannel")
ch := sub.Channel()
for msg := range ch {
fmt.Println("📩 收到訊息:", msg.Payload)
}
}


儲存 Struct (JSON 格式)

在 Redis 中儲存結構體時,通常會使用 JSON 格式轉換。

import (
"encoding/json"
) // Employee 結構
type Employee struct {
ID string `json:"id"`
Name string `json:"name"`
Age int `json:"age"`
} // 儲存 Struct
func SetStruct() {
emp := Employee{ID: "123", Name: "John", Age: 30}
jsonData, _ := json.Marshal(emp) err := rdb.Set(ctx,
err := rdb.Set(ctx, "employee:123", jsonData, 0).Err()
if err != nil {
log.Fatalf("❌ 設定失敗: %v", err)
} else {
fmt.Println("✅ Struct 設定成功!")
}
} // 取得 Struct
func GetStruct() {
val, err := rdb.Get(ctx, "employee:123").Result()
if err == redis.Nil {
fmt.Println("🔸 Key 不存在")
} else if err != nil {
log.Fatalf("❌ 取得失敗: %v", err)
} else {
var emp Employee
json.Unmarshal([]byte(val), &emp)
fmt.Println("✅ 取得 Struct:", emp)
}
}


Redis 列表 (List)

func UseList() {
// 推入元素
rdb.RPush(ctx, "mylist", "A", "B", "C")
// 取得範圍內的元素
values, _ := rdb.LRange(ctx, "mylist", 0, -1).Result()
fmt.Println("📌 List 內容:", values)
// 彈出元素
rdb.LPop(ctx, "mylist")
}


Redis Hash (哈希)

func UseHash() {
rdb.HSet(ctx, "user:1001", "name", "Alice", "age", "25")
// 取得單個欄位
name, _ := rdb.HGet(ctx, "user:1001", "name").Result()
fmt.Println("📝 使用者名稱:", name)
// 取得整個 Hash
data, _ := rdb.HGetAll(ctx, "user:1001").Result()
fmt.Println("📝 使用者資料:", data)
}


總結

這篇指南涵蓋了 Golang 使用 Redis 的 基礎操作

  1. 連線
  2. 設定/取得 Key
  3. 刪除 Key
  4. 訂閱/發布 (Pub/Sub)
  5. 儲存 Struct (JSON)
  6. 使用 List
  7. 使用 Hash








留言

這個網誌中的熱門文章

[Kotlin]如何學習Kotlin

[golang]如何使用 gorm 高效執行批量插入 (可以透過 Create()、CreateInBatches(),或者 原生 SQL 語句 來提升效率)

[Kotlin]Kotlin Multiplatform (KMP) 如何安裝使用和部署