diff --git a/CHANGELOG.md b/CHANGELOG.md index 1202a5e5eb1..42cfe3e60cb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,7 +28,7 @@ - Add consumer offset reset policy option to Kafka scaler ([#925](https://github.com/kedacore/keda/pull/925)) - Add option to restore to original replica count after ScaledObject's deletion ([#219](https://github.com/kedacore/keda-docs/pull/219)) - Add Prometheus metrics for KEDA Metrics API Server ([#823](https://github.com/kedacore/keda/issues/823) | [docs](https://keda.sh/docs/2.0/operate/#prometheus-exporter-metrics)) - +- add support for multiple redis list types in redis list scaler ([#1006](https://github.com/kedacore/keda/pull/1006)) | [docs](https://keda.sh/docs/2.0/scalers/redis-lists/)) ### Improvements - HPA: move from autoscaling v2beta1 to v2beta2 ([#721](https://github.com/kedacore/keda/issues/721)) 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() }