// 范围扫描 func (l *LevelRedis) Enumerate(iter *gorocks.Iterator, min, max []byte, direction IterDirection, fn func(i int, key, value []byte, quit *bool)) { l.incrCounter("enum") found := false if direction == IterBackward { if len(max) == 0 { iter.SeekToLast() } else { iter.Seek(max) } } else { if len(min) == 0 { iter.SeekToFirst() } else { iter.Seek(min) } } found = iter.Valid() if !found { return } i := -1 // 范围判断 if found && between(iter.Key(), min, max) { i++ quit := false fn(i, copyBytes(iter.Key()), copyBytes(iter.Value()), &quit) if quit { return } } for { found = false if direction == IterBackward { iter.Prev() } else { iter.Next() } found = iter.Valid() if found && between(iter.Key(), min, max) { i++ quit := false fn(i, copyBytes(iter.Key()), copyBytes(iter.Value()), &quit) if quit { return } } else { break } } return }