У меня есть развертывание Redis, действующее как слой кэширования. Кэш не очень большой, и мы хотели бы прочитать все элементы (ключ / значения) сразу из нашей программы Golang. Единственное решение, которое я нашел, - это перебрать все главные серверы (это кластер Redis), выполнить сканирование, чтобы получить все ключи, а затем перебрать ключи, чтобы получить значения.
err := cch.client.ForEachMaster(func(cl *redis.Client) error {
wg.Add(1)
defer wg.Done()
var cursor uint64
var n int
numFor := 0
for {
var keys []string
var err error
keys, cursor, err = cl.Scan(cursor, "*", 10).Result()
if err != nil {
panic(err)
}
n += len(keys)
for _, keyval := range keys {
var cont Content
if err := cch.items.Get(keyval, &cont); err == nil {
} else {
log.Warnf("Error getting Key %s from cache: %s from master %s", keyval, err)
}
}
if cursor == 0 {
break
}
}
return nil
})
wg.Wait()
Есть ли лучший способ сделать это? Не могу поверить, что мне нужно так много поездок в Redis, чтобы получить значения. Спасибо!