package commands import ( "errors" "path/filepath" "redisClone/pkg/core" "sort" "strconv" ) func Keys(args []string, getShard func(k string) *core.Shard) interface{} { pattern := args[1] limit := -1 if len(args) == 3 { val, err := strconv.Atoi(args[2]) if err != nil { return errors.New("value is not an integer") } limit = val } return dbInstance.ExecuteReadAll(func(shards []*core.Shard) interface{} { var matches []string for _, shard := range shards { for key := range shard.Data { matched, err := filepath.Match(pattern, key) if err != nil { return errors.New("illegal glob pattern") } if matched { matches = append(matches, key) } } } sort.Strings(matches) if limit != -1 && len(matches) > limit { matches = matches[:limit] } return matches }) }