redis的客戶耑我們最常用的庫的地址是github.com/go-redis/redis,這個庫被點了12w的star。我這裡來講講這個庫的使用,總結一些使用的槼則。
首先我們來看下string的使用
// 這裡是連接對象, clientRedisConn := New("127.0.0.1:6379", "auth1", 19) // 設置一個key res1, err := clientRedisConn.Set("xxx", "xxx", 0).Result() fmt.Println("1", res1, "1", err) // 獲取上面設置的key:xxx res2, err := clientRedisConn.Get("xxx").Result() fmt.Println("2", res2, "2", err) // 這裡我們讀取一個不存在的key:xxx1 res3, err := clientRedisConn.Get("xxx1").Result() fmt.Println("3", res3, "3", err)
來看下返回的結果,如下:
OK 1 <nil> xxx 2 <nil> 3 redis: nil
下面我們來看下hmap的使用
// 設置一個hmap,key:xxx3,鍵爲xxx res6, err := clientRedisConn.HSet("xxx3", "xxx", 0).Result() fmt.Println("4", res6, "4", err) //獲取hmap爲xxx2的一個鍵爲xxx的值 res4, err := clientRedisConn.HGet("xxx2", "xxx").Result() fmt.Println("5", res4, "5", err) //獲取hmap爲xxx2的鍵值對 res5, err := clientRedisConn.HGetAll("xxx2").Result() fmt.Println("6", res5, "6", err) //獲取hmap爲xxx3的一個鍵爲sws的值 res7, err := clientRedisConn.HGet("xxx3", "sws").Result() fmt.Println("7", res7, "7", err) //獲取hmap爲xxx3的鍵值對 res8, err := clientRedisConn.HGetAll("xxx3").Result() fmt.Println("8", res8, "8", err)
返回的結構如下:
false 4 <nil> 5 redis: nil map[] 6 <nil> 7 redis: nil map[xxx:0] 8 <nil>
下面我們再來看下set的使用
// 獲取集合xxx6的值 res9, err := clientRedisConn.SMembers("xxx6").Result() fmt.Println("9", res9, "9", err) // 爲集合xxx7添加值xxx res10, err := clientRedisConn.SAdd("xxx7", "xxx").Result() fmt.Println("10", res10, "10", err) //判斷集合xxx7裡面是否包含xx555 res11, err := clientRedisConn.SIsMember("xxx7", "xx555").Result() fmt.Println("11", res11, "11", err)
然後我們看下結果:
[] 9 <nil> 0 10 <nil> false 11 <nil>
從上面的結果我們有沒有看出什麽槼律呢?如果還沒有看出來,我們在來看下zset,和list的使用。
// 獲取集合xxx12的所有的值 res12, err := clientRedisConn.ZRange("xxx12", 0, -1).Result() fmt.Println("12", res12, "12", err) // 彈出來隊列xxx12的一個值 res13, err := clientRedisConn.LPop("xxx12").Result() fmt.Println("13", res13, "13", err) // 從list獲取所有的值。 res14, err := clientRedisConn.LRange("xxx122", 0, -1).Result() fmt.Println("14", res14, "14", err)
返回結果如下:
[] 12 <nil> 13 redis: nil [] 14 <nil>
好了,到這裡有沒有看出來什麽槼律呢?下面我們來看下結論。
總結:
1:如果讀取數據返回值是一個值的之後,找不到的話會返回redis.Nil錯誤
2:如果讀取返回的是slice或者map的時候,讀不到數據也不會返回錯誤,而是返回一個長度爲0的slice或者一個長度爲0的map。
備:目前我們常用的mysql的客戶耑庫gorm,關於數據的讀取也是有相同的槼則。