21天精品區塊鏈課程免費學習,深入實戰行家帶路,助力開發人員輕鬆玩轉區塊鏈!>>>
使用redis的pipeline,批量擷取redis中的key值時,報錯,分析發現,批量擷取時,exec後,會返回兩種值:nil 及 redis.Nil,
這種情況下,使用常規的 if err!=nil 的判斷方法判斷錯誤,是會報錯的。
測試代碼:
package mainimport ("github.com/go-redis/redis""log""strconv")func main() {client := redis.NewClient(&redis.Options{Addr: "localhost:6379",Password: "", // no password setDB: 0, // use default DBNetwork: "tcp",PoolSize: 50,})if _, err := client.Ping().Result(); err != nil {panic(err)}pipe := client.Pipeline()log.Println("所有的key都存在:")for i := 0; i < 4; i++ {key := "n:" + strconv.FormatInt(int64(i), 10)pipe.Get(key)}result, err := pipe.Exec()log.Println(result)log.Println(err == nil)log.Println(err == redis.Nil)log.Println("有不存在的key:")for i := 0; i < 5; i++ {key := "n:" + strconv.FormatInt(int64(i), 10)pipe.Get(key)}result, err = pipe.Exec()log.Println(result)log.Println(err == nil)log.Println(err == redis.Nil)defer client.Close()}
運行結果:
可以看到,如果批量擷取的key中,有不存在的key,返回的會是redis.Nil,否則返回的是nil。