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