1
0
mirror of https://github.com/charlienet/go-mixed.git synced 2025-07-18 08:32:40 +08:00

优化redis eval的key重命名

This commit is contained in:
2023-10-26 15:47:33 +08:00
parent 91a5a7d612
commit 5a17236fd7
5 changed files with 30 additions and 16 deletions

View File

@ -20,7 +20,7 @@ const (
var Nil = redis.Nil
type ReidsOption struct {
type RedisOption struct {
Addr string
Addrs []string
Password string // 密码
@ -67,7 +67,7 @@ type redisClient struct {
separator string
}
func New(opt *ReidsOption) redisClient {
func New(opt *RedisOption) redisClient {
var rdb redisClient
if len(opt.Addrs) == 0 && len(opt.Addr) > 0 {
@ -114,12 +114,6 @@ func New(opt *ReidsOption) redisClient {
return rdb
}
func (rdb redisClient) Eval(ctx context.Context, script string, keys []string, args ...interface{}) *redis.Cmd {
newKeys := rdb.FormatKeys(keys...)
return rdb.UniversalClient.Eval(ctx, script, newKeys, args...)
}
func (rdb redisClient) Prefix() string {
return rdb.prefix
}

View File

@ -143,7 +143,7 @@ func TestRedisPool(t *testing.T) {
t.Log(client.ConfigGet(context.Background(), "slowlog-log-slower-than").Result())
}, redis.ReidsOption{
}, redis.RedisOption{
Addr: "192.168.123.100:6379",
PoolSize: 100,
PoolFIFO: true,

View File

@ -49,7 +49,7 @@ func (r renameKey) renameKey(cmd redis.Cmder) {
}
switch strings.ToUpper(cmd.Name()) {
case "SELECT", "EVAL":
case "SELECT":
// 无KEY指令
case
"RENAME", "RENAMENX",
@ -69,6 +69,11 @@ func (r renameKey) renameKey(cmd redis.Cmder) {
case "MSET", "MSETNX":
// 间隔KEYKEY位置规则1,3,5,7
r.rename(args, createSepuence(1, len(args), 2)...)
case "EVAL":
// 命令中包含键数量 EVAL script numkeys [key [key ...]] [arg [arg ...]]
if n, ok := args[2].(int); ok && n > 0 {
r.rename(args, createSepuence(3, 3+n, 1)...)
}
default:
// 默认第一个参数为键值
r.rename(args, 1)

View File

@ -1,9 +1,24 @@
package redis
import "testing"
import (
"context"
"testing"
"github.com/stretchr/testify/assert"
)
func TestRename(t *testing.T) {
New(&ReidsOption{
New(&RedisOption{
Addrs: []string{"192.168.123.100:6379"},
})
}
func TestEvalName(t *testing.T) {
rdb := New(&RedisOption{
Addrs: []string{"192.168.123.100:6379"},
Prefix: "aabbcc",
})
_, err := rdb.Eval(context.Background(), "return 1", []string{"a1", "a2", "a3"}, "b1", "b2", "b3").Result()
assert.Nil(t, err, err)
}