From dbb41e7512ec68607974ce57fafd4350747e73a7 Mon Sep 17 00:00:00 2001 From: ilyamor Date: Wed, 19 Aug 2020 14:14:03 +0300 Subject: [PATCH] add support for multiple redis list types Signed-off-by: ilyamor --- pkg/scalers/redis_scaler.go | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/pkg/scalers/redis_scaler.go b/pkg/scalers/redis_scaler.go index 0ac0087a712..04ba277be71 100644 --- a/pkg/scalers/redis_scaler.go +++ b/pkg/scalers/redis_scaler.go @@ -206,9 +206,30 @@ func getRedisListLength(ctx context.Context, address string, password string, li } client := redis.NewClient(options) + var listType *redis.StatusCmd - cmd := client.LLen(listName) + listType = client.Type(listName) + if listType.Err() != nil { + return -1, listType.Err() + } + + var cmd *redis.IntCmd + switch listType.Val() { + case "list": + cmd = client.LLen(listName) + case "set": + cmd = client.SCard(listName) + case "hash": + cmd = client.HLen(listName) + case "zset": + cmd = client.ZCard(listName) + default: + cmd = nil + } + if cmd == nil { + return -1, fmt.Errorf("list must be of type:list,set,hash,zset but was %s", listType.Val()) + } if cmd.Err() != nil { return -1, cmd.Err() }