Go 学习笔记(60)— Go 第三方库之 go-redis(初始化 redis、操作 string、操作 list、操作 set、操作 hset)
1. 第三方庫 go-redis
因為 Go 標準庫中是沒提供 redis 的庫,所以我們選擇用 go-redis 這個第三方庫。源碼地址為 https://github.com/go-redis/redis
在命令行中使用 go get 來安裝
go get github.com/go-redis/redis
2. 初始化 Redis
在進行代碼之前,需要先安裝 redis,安裝指導請參考:https://blog.csdn.net/wohu1104/article/details/86755570
通過 redis.NewClient 函數創建一個 Redis 客戶端,并通過 redis.Options 配置 Redis 相關的屬性,例如 Redis 服務器地址、數據庫名、數據庫密碼等。
package mainimport ("fmt""github.com/go-redis/redis"
)var client *redis.Clientfunc initClient() error {// 創建 redis 客戶端client = redis.NewClient(&redis.Options{Addr: "127.0.0.1:6379",Password: "", // no password setDB: 0, // use default DBPoolSize: 10, // 連接池的大小為 10})//defer client.Close()// 通過 cient.Ping() 來檢查是否成功連接到了 redis 服務器pong, err := client.Ping().Result()fmt.Println("Redis Client: " + pong)return err
}
func main() {initClient()
}
3. 操作 String
在 Redis 中 string 比較常用的類型,所有鍵值均是字符串對象。
func operateString() {// 第三個參數是過期時間, 如果是0, 則表示沒有過期時間.err := client.Set("name", "wohu", 0).Err()if err != nil {fmt.Printf("set name error: %v\n", err)return}err = client.Set("age", 20, 0).Err()if err != nil {fmt.Printf("set age error: %v\n", err)return}// 獲取某值userName, err := client.Get("name").Result()if err != nil {fmt.Printf("get user_name error: %v\n", err)return}fmt.Println("get name", userName)userAge, err := client.Get("age").Result()if err != nil {fmt.Printf("get age error: %v\n", err)return}fmt.Println("get age", userAge)
}
查看 redis 并獲取值,與代碼執行一致。
ubuntu@wohu:/$ redis-cli
127.0.0.1:6379> keys *
1) "name"
2) "age"
127.0.0.1:6379> get name
"wohu"
127.0.0.1:6379> get age
"20"
127.0.0.1:6379>
4. 操作 List
func operateList() {// 從列表的尾部進行添加err := client.RPush("message", "01").Err()if err != nil {fmt.Printf("rpush message error: %v\n", err)return}// 從列表的頭部進行添加err = client.LPush("message", "02").Err()if err != nil {fmt.Printf("lpush message error: %v\n", err)return}// 從列表尾部彈出元素message, err := client.RPop("message").Result()if err != nil {fmt.Printf("rpop message error: %v\n", err)return}fmt.Println("rpop message: ", message)// 獲取長度length, err := client.LLen("message").Result()if err != nil {fmt.Printf("llen message error: %v\n", err)return}fmt.Println("message length: ", length)
}
redis 查詢結果:
127.0.0.1:6379> lrange message 0 -1
1) "02"
127.0.0.1:6379>
5. 操作 set
這是一個沒有無序數組且不能有重復,其叫無序集合:
func operateSet() {// 向 set_test 中添加元素client.SAdd("set_test", "name")client.SAdd("set_test", "age")client.SAdd("set_test", "gender")// 判斷 name 是否在集合中isMember, err := client.SIsMember("set_test", "name").Result()if err != nil {fmt.Printf("sismember set_test error: %v\n", err)return}fmt.Println("sismember set_test:", isMember)// 獲取集合 set_test 中所有的元素all, err := client.SMembers("set_test").Result()if err != nil {fmt.Printf("smembers set_test error: %v\n", err)return}fmt.Println("smembers set_test: ", all)
}
127.0.0.1:6379> smembers set_test
1) "name"
2) "age"
3) "gender"
127.0.0.1:6379>
6. 操作 hset
func operateHash() {// 向 hash 類型添加元素client.HSet("student", "name", "jack")client.HSet("student", "age", 18)// 批量地向名稱為 student 的 hash 中添加元素client.HMSet("user", map[string]interface{}{"id": 1, "time": "2020-03-31"})// 批量獲取名為 student 的 hash 中的指定字段的值.fields, err := client.HMGet("student", "name", "age").Result()if err != nil {fmt.Printf("hmget user error: %v\n", err)return}fmt.Println("hmget user: ", fields)// 獲取名為 student 的 hash 中的字段個數length, err := client.HLen("student").Result()if err != nil {fmt.Printf("hlen student error: %v\n", err)return}fmt.Println("hlen user: ", length)
}
參考:
https://github.com/go-redis/redis
https://gitbook.cn/books/5e7637996ba17a6d2c9a3352/index.html
https://github.com/fwhezfwhez/gitchat/tree/master/chat1-web%E5%90%8E%E7%AB%AF%E5%AE%9E%E6%88%98
總結
以上是生活随笔為你收集整理的Go 学习笔记(60)— Go 第三方库之 go-redis(初始化 redis、操作 string、操作 list、操作 set、操作 hset)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Go 学习笔记(59)— Go 第三方库
- 下一篇: 2022-2028年中国密胺塑料制品行业