golang操作redis主要有两个库,go-redis和redigo
go-redis对函数的封装更简洁, 而且支持连接哨兵及集群模式的Redis
import “github.com/go-redis/redis/v8”
1 连接redisServer
(1) 法一
import "github.com/go-redis/redis/v8"rdb = redis.NewClient(&redis.Options{Addr: "localhost:6379",Password: "", // no password setDB: 0, // use default DB})
(2) 法二
opt, err := redis.ParseURL("redis://<user>:<pass>@localhost:6379/<db>")if err != nil {panic(err)}rdb = redis.NewClient(opt)
2 set/get
func redisExample() {rdb := RedisClienterr := rdb.Set("score", 100, 0).Err()if err != nil {fmt.Printf("set score failed, err:%v\n", err)return}val, err := rdb.Get("score").Result()if err != nil {fmt.Printf("get score failed, err:%v\n", err)return}fmt.Println("score", val)val2, err := rdb.Get("name").Result()if err == redis.Nil {fmt.Println("name does not exist")} else if err != nil {fmt.Printf("get name failed, err:%v\n", err)return} else {fmt.Println("name", val2)}}
3 zset
func redisExample2() {zsetKey := "language_rank"languages := []redis.Z{{Score: 90.0, Member: "Golang"},{Score: 98.0, Member: "Java"},{Score: 95.0, Member: "Python"},{Score: 97.0, Member: "JavaScript"},{Score: 99.0, Member: "C/C++"},}// ZADDnum, err := rdb.ZAdd(zsetKey, languages...).Result()if err != nil {fmt.Printf("zadd failed, err:%v\n", err)return}fmt.Printf("zadd %d succ.\n", num)// 把Golang的分数加10newScore, err := rdb.ZIncrBy(zsetKey, 10.0, "Golang").Result()if err != nil {fmt.Printf("zincrby failed, err:%v\n", err)return}fmt.Printf("Golang's score is %f now.\n", newScore)// 取分数最高的3个ret, err := rdb.ZRevRangeWithScores(zsetKey, 0, 2).Result()if err != nil {fmt.Printf("zrevrange failed, err:%v\n", err)return}for _, z := range ret {fmt.Println(z.Member, z.Score)}// 取95~100分的op := redis.ZRangeBy{Min: "95",Max: "100",}ret, err = rdb.ZRangeByScoreWithScores(zsetKey, op).Result()if err != nil {fmt.Printf("zrangebyscore failed, err:%v\n", err)return}for _, z := range ret {fmt.Println(z.Member, z.Score)}}
