我有一个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才能获得价值。谢谢!