Redis是一種內存非關係型數據存儲技術,類似於Memcached,但更加多功能。Go-Redis是一個開源的、支持go語言的Redis客戶端,它實現了了REdis協議,並提供了簡單易用的API介面。在本教程中,我們將探討從基礎到高級的Go-Redis用法。
一、連接Redis
在使用Go-Redis操作Redis之前,我們需要先建立一個連接。連接可以通過傳遞參數來進行配置,例如IP地址、埠和連接超時時間。
import "github.com/go-redis/redis"
func main() {
client := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password set
DB: 0, // use default DB
})
}
連接設置完成後,一個Redis客戶端實例就可以被創建。接下來,我們需要驗證連接是否正確建立。
pong, err := client.Ping().Result() fmt.Println(pong, err)
如果連接成功,’PONG’會被返回。如果連接失敗,則會反饋錯誤信息。
二、字元串操作
Redis將所有數據視為字元串。在Go-Redis中,我們可以使用SET命令來設置一個鍵值對。
err := client.Set("key", "value", 0).Err()
if err != nil {
panic(err)
}
我們可以使用GET命令獲取設置的鍵值對。
val, err := client.Get("key").Result()
if err != nil {
panic(err)
}
fmt.Println("value", val)
我們還可以設置鍵值對的過期時間。
err := client.Set("key", "value", 10*time.Second).Err()
if err != nil {
panic(err)
}
在10秒後,鍵值對將自動從Redis中刪除。你可以通過TTL命令查詢過期時間。
ttl, err := client.TTL("key").Result()
if err != nil {
panic(err)
}
fmt.Println("ttl", ttl)
三、列表操作
Redis的列表是一個字元串數組,我們可以在列表的開頭或結尾添加數據。我們可以使用LPUSH或RPUSH命令將數據添加到列表中,通過LLEN命令獲取列表長度。
err := client.LPush("list", "item1").Err()
if err != nil {
panic(err)
}
err = client.RPush("list", "item2").Err()
if err != nil {
panic(err)
}
listLen, err := client.LLen("list").Result()
if err != nil {
panic(err)
}
fmt.Println("list length", listLen)
我們可以通過LINDEX來獲取列表中指定位置的元素。
val, err := client.LIndex("list", 0).Result()
if err != nil {
panic(err)
}
fmt.Println("List item 0", val)
val, err = client.LIndex("list", 1).Result()
if err != nil {
panic(err)
}
fmt.Println("List item 1", val)
我們也可以使用LPOP和RPOP命令來刪除並彈出列表中的元素。
val, err := client.LPop("list").Result()
if err != nil {
panic(err)
}
fmt.Println("Deleted item", val)
val, err = client.RPop("list").Result()
if err != nil {
panic(err)
}
fmt.Println("Deleted item", val)
listLen, err = client.LLen("list").Result()
if err != nil {
panic(err)
}
fmt.Println("list length", listLen)
四、哈希操作
Redis的哈希是一個字元串->字元串的映射表,我們可以將一些相關信息存儲在同一個哈希中。我們可以使用HSET命令來設置哈希值。
err := client.HSet("user_12345", "name", "John").Err()
if err != nil {
panic(err)
}
我們可以使用HGET命令來獲取哈希值。
name, err := client.HGet("user_12345", "name").Result()
if err != nil {
panic(err)
}
fmt.Println("User name", name)
我們也可以將多個值設置到哈希表中。
fields := map[string]string{
"username": "john123",
"email": "john@example.com",
"phone": "123456789",
}
err := client.HMSet("user_12345", fields).Err()
if err != nil {
panic(err)
}
email, err := client.HGet("user_12345", "email").Result()
if err != nil {
panic(err)
}
fmt.Println("User email", email)
我們還可以使用HDEL命令來刪除哈希中的指定鍵。
err := client.HDel("user_12345", "phone").Err()
if err != nil {
panic(err)
}
五、執行腳本
Redis提供了一個內置的腳本引擎,可以使用LUA語言編寫腳本。
我們可以使用EVAL命令來執行腳本,Go-Redis提供了一個Script結構體,可以用於預編譯和緩存腳本。
script := redis.NewScript(`
return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}
`)
result, err := script.Run(client, []string{"key1", "key2"}, "first", "second").Result()
if err != nil {
panic(err)
}
fmt.Println(result)
六、總結
在本教程中,我們學習了Go-Redis的基本操作,包括建立連接、字元串操作、列表操作、哈希操作和執行腳本等。Go-Redis是一個簡單易用的Redis客戶端,它提供了豐富的API介面和靈活的配置。它對於處理大量數據和高並發場景來說非常有用。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/288642.html
微信掃一掃
支付寶掃一掃