似乎通过大量键进行分页涉及使用 Get() 的 WithFromKey() 和 WithLimit() 选项。例如,如果我想获取 10 个项目的 2 页,我会执行以下操作:
opts := []clientv3.OpOption {
clientv3.WithPrefix(),
clientv3.WithSort(clientv3.SortByKey, clientv3.SortAscend),
clientv3.WithLimit(10),
}
gr, err := kv.Get(ctx, "key", opts...)
if err != nil {
log.Fatal(err)
}
fmt.Println("--- First page ---")
for _, item := range gr.Kvs {
fmt.Println(string(item.Key), string(item.Key))
}
lastKey := string(gr.Kvs[len(gr.Kvs)-1].Value)
fmt.Println("--- Second page ---")
opts = append(opts, clientv3.WithFromKey())
gr, _ = kv.Get(ctx, lastKey, opts...)
// Skipping the first item, which the last item from from the previous Get
for _, item := range gr.Kvs[1:] {
fmt.Println(string(item.Key), string(item.Value))
}
问题是最后一个键作为第二页的第一项再次被提取,我需要跳过它并且只有 9 个新项目。
这是分页的正确方法还是我错过了什么?