[golang] redis 使用
- 取得連結
- X
- 以電子郵件傳送
- 其他應用程式
在 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 的 基礎操作:
- 連線
- 設定/取得 Key
- 刪除 Key
- 訂閱/發布 (Pub/Sub)
- 儲存 Struct (JSON)
- 使用 List
- 使用 Hash
留言
張貼留言