iT邦幫忙

2023 iThome 鐵人賽

DAY 26
0

在現代軟體開發中,分散式系統已變得愈來愈普遍。其中一個關鍵的技術是 Redis,一個高性能的鍵值對儲存系統。今天將介紹如何結合 Golang 與 Redis 。

什麼是 Redis

Redis 全名為 遠端資料庫(Remote Dictionary Server),是一個非常快速且高效能的資料儲存系統。

你可以想像成一個特別聰明的記事本,可以用來儲存各種資訊,像是數字、文字、甚至是複雜的資料。這個「記事本」是非常快的,因為它大部分時間都是保存在電腦的記憶體中,能夠以毫秒的速度快速回應你的查詢。

Redis 是一個開源高性能的鍵值對儲存系統,通常被用於 快取會話儲存消息佇列 等應用。

Redis 是一個記憶體中的資料庫,並使用非常高效的數據結構來存儲資料。支援多種數據結構,包括字符串、散列、列表、集合、有序集合等,在不同的應用場景中都非常有用。還可以設定為將資料定期寫入磁碟,這樣即使伺服器重啟,資料也不會遺失。

使用 Redis

  • 導入
go get github.com/go-redis/redis
  • 連接到 Redis 伺服器
package main

import (
    "fmt"
    "github.com/go-redis/redis"
)

func main() {
    // 建立到 Redis 伺服器的連接
    client := redis.NewClient(&redis.Options{
        Addr:     "localhost:6379", // Redis 伺服器位址
        Password: "",              // 可選的伺服器密碼
        DB:       0,               // 選擇的數據庫
    })

    // 測試連接
    pong, err := client.Ping().Result()
    if err != nil {
        fmt.Println("無法連接到 Redis 伺服器:", err)
    } else {
        fmt.Println("連接成功:", pong)
    }
}

儲存和檢索資料

// 儲存用戶設定檔案
func SaveUserProfile(client *redis.Client, userID string, settings map[string]string) error {
    return client.HMSet(userID, settings).Err()
}

// 檢索用戶設定檔案
func GetUserProfile(client *redis.Client, userID string) (map[string]string, error) {
    return client.HGetAll(userID).Result()
}

附上完整程式碼
建立 Redis 伺服器的連接,測試連接,然後儲存一個用戶的設定檔案,接著檢索這個設定檔案,最後關閉與 Redis 的連接。

package main

import (
    "fmt"
    "github.com/go-redis/redis"
)

func main() {
    // 建立到 Redis 伺服器的連接
    client := redis.NewClient(&redis.Options{
        Addr:     "localhost:6379", // Redis 伺服器位址
        Password: "",              // 自定義伺服器密碼
        DB:       0,               // Databases
    })

    defer client.Close() // 確保在程式結束時關閉連接

    // 測試連接
    pong, err := client.Ping().Result()
    if err != nil {
        fmt.Println("無法連接到 Redis 伺服器:", err)
        return
    }
    fmt.Println("連接成功:", pong)

    // 儲存用戶設定檔案
    userID := "user123"
    userSettings := map[string]string{
        "name":  "Simba",
        "email": "Simba@gmail.com",
    }

    err = SaveUserProfile(client, userID, userSettings)
    if err != nil {
        fmt.Println("儲存用戶設定檔案時發生錯誤:", err)
        return
    }
    fmt.Println("用戶設定檔案儲存成功")

    // 檢索用戶設定檔案
    retrievedSettings, err := GetUserProfile(client, userID)
    if err != nil {
        fmt.Println("檢索用戶設定檔案時發生錯誤:", err)
        return
    }
    fmt.Println("用戶設定檔案:", retrievedSettings)
}

// 儲存用戶設定檔案
func SaveUserProfile(client *redis.Client, userID string, settings map[string]string) error {
    return client.HMSet(userID, settings).Err()
}

// 檢索用戶設定檔案
func GetUserProfile(client *redis.Client, userID string) (map[string]string, error) {
    return client.HGetAll(userID).Result()
}

碎語

這週末要和家人出遊,狗狗自己去住寵物旅館,平安順利。


上一篇
25 | 真情的自我
下一篇
27 | 什麼是泛型?
系列文
Go 語言學習手札30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言