From 1ae5806ce35fbddd696f90446d89d1540893cabb Mon Sep 17 00:00:00 2001 From: andyli Date: Thu, 21 Feb 2019 00:19:53 +0800 Subject: [PATCH] use SCAN replace KEYS --- cache/redis_store.go | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/cache/redis_store.go b/cache/redis_store.go index 39fe829..6c0e599 100644 --- a/cache/redis_store.go +++ b/cache/redis_store.go @@ -67,9 +67,24 @@ func (s *RedisStore) Forget(key string) error { func (s *RedisStore) Flush() error { c := s.pool.Get() defer c.Close() - keys, err := redis.Strings(c.Do("KEYS", s.prefix+"*")) - if err != nil { - return err + + var err error + iter := 0 + keys := []string{} + + for { + arr, err := redis.Values(c.Do("SCAN", iter, "MATCH", s.prefix+"*")) + if err != nil { + return err + } + + iter, _ = redis.Int(arr[0], nil) + k, _ := redis.Strings(arr[1], nil) + keys = append(keys, k...) + + if iter == 0 { + break + } } for _, key := range keys { if _, err = c.Do("DEL", key); err != nil {