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,关于数据的读取也是有相同的规则。