在現代軟體開發中,分散式系統已變得愈來愈普遍。其中一個關鍵的技術是 Redis,一個高性能的鍵值對儲存系統。今天將介紹如何結合 Golang 與 Redis 。
Redis
全名為 遠端資料庫
(Remote Dictionary Server),是一個非常快速且高效能的資料儲存系統。
你可以想像成一個特別聰明的記事本,可以用來儲存各種資訊,像是數字、文字、甚至是複雜的資料。這個「記事本」是非常快的,因為它大部分時間都是保存在電腦的記憶體中,能夠以毫秒的速度快速回應你的查詢。
Redis 是一個開源高性能的鍵值對儲存系統,通常被用於 快取
、 會話儲存
、 消息佇列
等應用。
Redis 是一個記憶體中的資料庫
,並使用非常高效的數據結構來存儲資料。支援多種數據結構,包括字符串、散列、列表、集合、有序集合等,在不同的應用場景中都非常有用。還可以設定為將資料定期寫入磁碟,這樣即使伺服器重啟,資料也不會遺失。
go get github.com/go-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()
}
這週末要和家人出遊,狗狗自己去住寵物旅館,平安順利。