You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

382 lines
9.7 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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())
}