代码之家  ›  专栏  ›  技术社区  ›  OCDev

从Redis/Golang客户端读取整个数据

  •  1
  • OCDev  · 技术社区  · 6 年前

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

    1 回复  |  直到 6 年前
        1
  •  2
  •   pfctgeorge    6 年前