package main import ( "context" "fmt" "github.com/go-redis/redis/v9" ) func main() { // add //add() //get() //getByLex() // pop //pop() //remove //remove() // count //count() // 交集差集并集 setOp() } func setOp() { opt, err := redis.ParseURL("redis://default:yourPassword@192.168.157.135:6379/0?dial_timeout=1") if err != nil { panic(err) } client := redis.NewClient(opt) ctx := context.Background() // 初始数据 client.Del(ctx, "A") client.ZAdd(ctx, "A", redis.Z{Score: 1, Member: "one"}, redis.Z{Score: 2, Member: "two"}, redis.Z{Score: 3, Member: "three"}, ) client.Del(ctx, "B") client.ZAdd(ctx, "B", redis.Z{Score: 22, Member: "two"}, redis.Z{Score: 33, Member: "three"}, redis.Z{Score: 44, Member: "four"}, ) // 交集 fmt.Println(client.ZInterWithScores(ctx, &redis.ZStore{ // 哪些key参与 Keys: []string{"A", "B"}, // 权重,聚合时,为每个集合成员增加的权重 Weights: []float64{2, 3}, // 聚合方法,默认为 SUM Aggregate: "SUM", // 和 //Aggregate: "MIN", // 使用小的 //Aggregate: "MAX", // 使用大的 }).Result()) // 并集 fmt.Println(client.ZUnionWithScores(ctx, redis.ZStore{ // 哪些key参与 Keys: []string{"A", "B"}, // 权重,聚合时,为每个集合成员增加的权重 Weights: []float64{2, 3}, // 聚合方法,默认为 SUM Aggregate: "SUM", // 和 //Aggregate: "MIN", // 使用小的 //Aggregate: "MAX", // 使用大的 }).Result()) // 差集 // 不需要聚合运算,保留本集合内的成员集合 fmt.Println(client.ZDiffWithScores(ctx, "A", "B").Result()) fmt.Println(client.ZDiffWithScores(ctx, "B", "A").Result()) } func count() { opt, err := redis.ParseURL("redis://default:yourPassword@192.168.157.135:6379/0?dial_timeout=1") if err != nil { panic(err) } client := redis.NewClient(opt) ctx := context.Background() // 初始数据 client.Del(ctx, "contentViews") client.ZAdd(ctx, "contentViews", redis.Z{Score: 4, Member: "jia"}, redis.Z{Score: 2, Member: "yi"}, redis.Z{Score: 5, Member: "bing"}, redis.Z{Score: 1, Member: "ding"}, redis.Z{Score: 0, Member: "wu"}, redis.Z{Score: 7, Member: "ji"}, redis.Z{Score: 2, Member: "geng"}, redis.Z{Score: 1, Member: "xin"}, redis.Z{Score: 8, Member: "ren"}, redis.Z{Score: 6, Member: "gui"}, ) fmt.Println(client.ZCard(ctx, "contentViews").Result()) fmt.Println(client.ZCount(ctx, "contentViews", "0", "5").Result()) //fmt.Println(client.ZCount(ctx, "contentViews", "0", "5").Result()) // 获取某个成员的排名 fmt.Println(client.ZRank(ctx, "contentViews", "xin")) } func remove() { opt, err := redis.ParseURL("redis://default:yourPassword@192.168.157.135:6379/0?dial_timeout=1") if err != nil { panic(err) } client := redis.NewClient(opt) ctx := context.Background() // 初始数据 client.Del(ctx, "contentViews") client.ZAdd(ctx, "contentViews", redis.Z{Score: 0, Member: "jia"}, redis.Z{Score: 0, Member: "yi"}, redis.Z{Score: 0, Member: "bing"}, redis.Z{Score: 0, Member: "ding"}, redis.Z{Score: 0, Member: "wu"}, redis.Z{Score: 0, Member: "ji"}, redis.Z{Score: 0, Member: "geng"}, redis.Z{Score: 0, Member: "xin"}, redis.Z{Score: 0, Member: "ren"}, redis.Z{Score: 0, Member: "gui"}, ) fmt.Println(client.ZRangeWithScores(ctx, "contentViews", 0, -1).Result()) // 基于确定成员删除 //client.ZRem(ctx, "contentViews", "ji", "bing", "geng") //fmt.Println(client.ZRangeWithScores(ctx, "contentViews", 0, -1).Result()) // 基于分值删除范围 //client.ZRemRangeByScore(ctx, "contentViews", "0", "5") //client.ZRemRangeByRank(ctx, "contentViews", 3, 6) // 注意全部成员分值要是0 //client.ZRemRangeByLex(ctx, "contentViews", "[a", "[h") //fmt.Println(client.ZRangeWithScores(ctx, "contentViews", 0, -1).Result()) } func pop() { opt, err := redis.ParseURL("redis://default:yourPassword@192.168.157.135:6379/0?dial_timeout=1") if err != nil { panic(err) } client := redis.NewClient(opt) ctx := context.Background() // 初始数据 client.Del(ctx, "contentViews") client.ZAdd(ctx, "contentViews", redis.Z{Score: 4, Member: "jia"}, redis.Z{Score: 2, Member: "yi"}, redis.Z{Score: 5, Member: "bing"}, redis.Z{Score: 1, Member: "ding"}, redis.Z{Score: 0, Member: "wu"}, redis.Z{Score: 7, Member: "ji"}, redis.Z{Score: 2, Member: "geng"}, redis.Z{Score: 1, Member: "xin"}, redis.Z{Score: 8, Member: "ren"}, redis.Z{Score: 6, Member: "gui"}, ) // 基于score fmt.Println(client.ZPopMin(ctx, "contentViews", 4).Result()) fmt.Println(client.ZRange(ctx, "contentViews", 0, -1).Result()) } func getByLex() { opt, err := redis.ParseURL("redis://default:yourPassword@192.168.157.135:6379/0?dial_timeout=1") if err != nil { panic(err) } client := redis.NewClient(opt) ctx := context.Background() // 初始数据 client.Del(ctx, "contentViews") client.ZAdd(ctx, "contentViews", redis.Z{Score: 0, Member: "jia"}, redis.Z{Score: 0, Member: "yi"}, redis.Z{Score: 0, Member: "bing"}, redis.Z{Score: 0, Member: "ding"}, redis.Z{Score: 0, Member: "wu"}, redis.Z{Score: 0, Member: "ji"}, redis.Z{Score: 0, Member: "geng"}, redis.Z{Score: 0, Member: "xin"}, redis.Z{Score: 0, Member: "ren"}, redis.Z{Score: 0, Member: "gui"}, ) fmt.Println(client.ZRangeArgs(ctx, redis.ZRangeArgs{ Key: "contentViews", // [a, h] //Start: "[a", //Stop: "[h", // Start: "-", Stop: "+", // 基于成员(名字)获取 ByLex: true, }).Result()) } func get() { opt, err := redis.ParseURL("redis://default:yourPassword@192.168.157.135:6379/0?dial_timeout=1") if err != nil { panic(err) } client := redis.NewClient(opt) ctx := context.Background() // 初始数据 client.Del(ctx, "contentViews") client.ZAdd(ctx, "contentViews", redis.Z{Score: 4, Member: "jia"}, redis.Z{Score: 2, Member: "yi"}, redis.Z{Score: 5, Member: "bing"}, redis.Z{Score: 1, Member: "ding"}, redis.Z{Score: 0, Member: "wu"}, redis.Z{Score: 7, Member: "ji"}, redis.Z{Score: 2, Member: "geng"}, redis.Z{Score: 1, Member: "xin"}, redis.Z{Score: 8, Member: "ren"}, redis.Z{Score: 6, Member: "gui"}, ) // Range获取范围 //fmt.Println(client.ZRange(ctx, "contentViews", 0, -1).Result()) //fmt.Println(client.ZRangeWithScores(ctx, "contentViews", 0, -1).Result()) //fmt.Println(client.ZRangeArgsWithScores(ctx, redis.ZRangeArgs{ // Key: "contentViews", // Start: nil, // Stop: nil, // // 基于分值获取 // ByScore: false, // // 基于成员(名字)获取 // ByLex: false, // Rev: false, // // 偏移 // Offset: 0, // // 总计,0表示全部 // Count: 0, //})) fmt.Println(client.ZRangeArgsWithScores(ctx, redis.ZRangeArgs{ Key: "contentViews", // [3, 7] //Start: 3, //Stop: 7, // [3, 7) //Start: 3, //Stop: "(7", // -inf, 7) Start: "-inf", Stop: "(7", // 基于分值获取 ByScore: true, // 偏移 Offset: 3, // 总计,0表示全部 Count: 3, }).Result()) //fmt.Println(client.ZRangeArgs()) //// 随机获取 //fmt.Println(client.ZRandMemberWithScores(ctx, "contentViews", 3).Result()) //fmt.Println(client.ZRandMemberWithScores(ctx, "contentViews", 3).Result()) //fmt.Println(client.ZRandMemberWithScores(ctx, "contentViews", 3).Result()) // //// 获取某个成员的分值 //fmt.Println(client.ZMScore(ctx, "contentViews", "gui", "jia", "ji").Result()) } func add() { opt, err := redis.ParseURL("redis://default:yourPassword@192.168.157.135:6379/0?dial_timeout=1") if err != nil { panic(err) } client := redis.NewClient(opt) ctx := context.Background() client.Del(ctx, "contentViews") // 快速添加 //client.ZAdd(ctx, "contentViews", redis.Z{ // Score: 4, // Member: "jia", //}, redis.Z{ // Score: 3, // Member: "yi", //}, redis.Z{ // Score: 2, // Member: "bing", //}, redis.Z{ // Score: 10, // Member: "ding", //}) // 完整参数版的 ZAdd,相当于 ZADD 命令 client.ZAddArgs(ctx, "contentViews", redis.ZAddArgs{ // 仅仅添加成员,不会去更新当前成员 NX: false, // 仅仅更新存在的成员,不会去添加成员 XX: false, // 只有当成员的新Score小于原有Score时,才去更新。(成员是已经存在的) LT: false, // 只有当成员的新Score大于原有Score时,才去更新。(成员是已经存在的) GT: false, // 返回修改的成员数量,包含(添加的和更新的)。默认仅返回添加的 Ch: false, // []Z Members: []redis.Z{ { Score: 4, Member: "jia", }, { Score: 3, Member: "yi", }, { Score: 2, Member: "bing", }, { Score: 10, Member: "ding", }}, }) // 查看 fmt.Println(client.ZRangeWithScores(ctx, "contentViews", 0, -1).Result()) //result := client.ZAddArgs(ctx, "contentViews", redis.ZAddArgs{ // // 仅仅添加成员,不会去更新当前成员 // //NX: true, // // 仅仅更新存在的成员,不会去添加成员 // //XX: true, // // 只有当成员的新Score小于原有Score时,才去更新。(成员是已经存在的) // //LT: true, // // 只有当成员的新Score大于原有Score时,才去更新。(成员是已经存在的) // //GT: true, // // 返回修改的成员数量,包含(添加的和更新的)。默认仅返回添加的 // Ch: true, // // []Z // Members: []redis.Z{ // { // Score: 44, // Member: "jia", // }, { // Score: 20, // Member: "wu", // }}, //}) //fmt.Println(result.Result()) // 递增更新 //client.ZIncrBy(ctx, "contentViews", 20, "bing") client.ZIncrBy(ctx, "contentViews", -20, "bing") client.ZAddArgsIncr(ctx, "contentViews", redis.ZAddArgs{ NX: false, XX: false, LT: false, GT: false, Ch: false, Members: nil, }) // 查看 fmt.Println(client.ZRangeWithScores(ctx, "contentViews", 0, -1).Result()) }