批量删除指定前缀的key

This commit is contained in:
meixiongfeng 2023-12-29 11:07:16 +08:00
parent 181c6912e1
commit d09e01b03b
7 changed files with 94 additions and 1 deletions

View File

@ -2,7 +2,9 @@ package cluster
import ( import (
"context" "context"
"fmt"
"go_dreamfactory/lego/sys/redis/core" "go_dreamfactory/lego/sys/redis/core"
"log"
"time" "time"
"github.com/go-redis/redis/v8" "github.com/go-redis/redis/v8"
@ -86,6 +88,24 @@ func (this *Redis) Watch(ctx context.Context, fn func(*redis.Tx) error, keys ...
return return
} }
// 删除
func (this *Redis) DelAllPrefixkey(ctx context.Context, prefix string) {
iter := this.client.Scan(ctx, 0, prefix+"*", 0).Iterator()
for iter.Next(ctx) {
key := iter.Val()
// 使用 DEL 命令删除 key
if err := this.client.Del(ctx, key).Err(); err != nil {
log.Printf("Failed to delete key %s: %v", key, err)
} else {
fmt.Printf("Deleted key: %s\n", key)
}
}
if err := iter.Err(); err != nil {
log.Fatal(err)
}
}
//锁 //锁
func (this *Redis) Lock(key string, outTime int) (result bool, err error) { func (this *Redis) Lock(key string, outTime int) (result bool, err error) {
cmd := redis.NewBoolCmd(this.client.Context(), "set", key, 1, "ex", outTime, "nx") cmd := redis.NewBoolCmd(this.client.Context(), "set", key, 1, "ex", outTime, "nx")

View File

@ -124,8 +124,8 @@ type (
EvalSha(ctx context.Context, sha1 string, keys []string, args ...interface{}) *redis.Cmd EvalSha(ctx context.Context, sha1 string, keys []string, args ...interface{}) *redis.Cmd
ScriptExists(ctx context.Context, hashes ...string) *redis.BoolSliceCmd ScriptExists(ctx context.Context, hashes ...string) *redis.BoolSliceCmd
// ScriptLoad(ctx context.Context, script string) *redis.StringCmd // ScriptLoad(ctx context.Context, script string) *redis.StringCmd
//
FlushAll(ctx context.Context) *redis.StatusCmd FlushAll(ctx context.Context) *redis.StatusCmd
DelAllPrefixkey(ctx context.Context, prefix string)
} }
ISys interface { ISys interface {

View File

@ -369,6 +369,11 @@ func (this *Redis) ZScan(key string, _cursor uint64, match string, count int64)
return this.client.ZScan(key, _cursor, match, count) return this.client.ZScan(key, _cursor, match, count)
} }
// 删除
func (this *Redis) DelAllPrefixkey(ctx context.Context, prefix string) {
this.client.DelAllPrefixkey(ctx, prefix)
}
//lua Script //lua Script
func (this *Redis) NewScript(src string) *redis.StringCmd { func (this *Redis) NewScript(src string) *redis.StringCmd {
return this.client.NewScript(src) return this.client.NewScript(src)

View File

@ -2,7 +2,9 @@ package single
import ( import (
"context" "context"
"fmt"
"go_dreamfactory/lego/sys/redis/core" "go_dreamfactory/lego/sys/redis/core"
"log"
"time" "time"
"github.com/go-redis/redis/v8" "github.com/go-redis/redis/v8"
@ -97,6 +99,23 @@ func (this *Redis) UnLock(key string) (err error) {
return return
} }
// 删除
func (this *Redis) DelAllPrefixkey(ctx context.Context, prefix string) {
iter := this.client.Scan(ctx, 0, prefix+"*", 0).Iterator()
for iter.Next(ctx) {
key := iter.Val()
// 使用 DEL 命令删除 key
if err := this.client.Del(ctx, key).Err(); err != nil {
log.Printf("Failed to delete key %s: %v", key, err)
} else {
fmt.Printf("Deleted key: %s\n", key)
}
}
if err := iter.Err(); err != nil {
log.Fatal(err)
}
}
//lua Script //lua Script
func (this *Redis) NewScript(src string) *redis.StringCmd { func (this *Redis) NewScript(src string) *redis.StringCmd {
script := redis.NewScript(src) script := redis.NewScript(src)

View File

@ -46,6 +46,7 @@ func (this *VikingRank) Start() (err error) {
// 0 0 0 ? * MON // 每周一零点 // 0 0 0 ? * MON // 每周一零点
cron.AddFunc("0 0 0 ? * MON", this.TimerSeason) cron.AddFunc("0 0 0 ? * MON", this.TimerSeason)
this.TimerSeason()
return return
} }

View File

@ -16,6 +16,7 @@ import (
"strconv" "strconv"
"github.com/go-redis/redis/v8" "github.com/go-redis/redis/v8"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive" "go.mongodb.org/mongo-driver/bson/primitive"
"go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/x/bsonx" "go.mongodb.org/mongo-driver/x/bsonx"
@ -239,6 +240,7 @@ func (this *ModelSRank) raceSettlement() {
szReward []*cfg.GameVikingRewardData szReward []*cfg.GameVikingRewardData
mailCid string mailCid string
) )
for iBossType := 1; iBossType <= 3; iBossType++ { for iBossType := 1; iBossType <= 3; iBossType++ {
mailCid = fmt.Sprintf("SeasonViking%dReward", iBossType) mailCid = fmt.Sprintf("SeasonViking%dReward", iBossType)
tableName := this.TableName + strconv.Itoa(int(iBossType)) tableName := this.TableName + strconv.Itoa(int(iBossType))
@ -274,4 +276,11 @@ func (this *ModelSRank) raceSettlement() {
}, ids...) }, ids...)
} }
} }
ctx := context.Background()
this.DBModel.Redis.DelAllPrefixkey(ctx, "vikingsrank")
this.DBModel.DB.DeleteMany(core.SqlTable(this.TableName), bson.M{})
return
} }

View File

@ -0,0 +1,39 @@
package viking_test
import (
"context"
"fmt"
"log"
"github.com/go-redis/redis/v8"
)
func main_test() {
ctx := context.Background()
// 创建 Redis 客户端
client := redis.NewClient(&redis.Options{
Addr: "localhost:10011", // 你的 Redis 地址
Password: "li13451234",
DB: 10, // 使用的数据库编号
})
// 指定要删除的 key 的前缀
prefix := "your_prefix"
// 使用 SCAN 命令遍历匹配前缀的 key
iter := client.Scan(ctx, 0, prefix+"*", 0).Iterator()
for iter.Next(ctx) {
key := iter.Val()
// 使用 DEL 命令删除 key
if err := client.Del(ctx, key).Err(); err != nil {
log.Printf("Failed to delete key %s: %v", key, err)
} else {
fmt.Printf("Deleted key: %s\n", key)
}
}
if err := iter.Err(); err != nil {
log.Fatal(err)
}
}