You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kvrocks.apache.org by ma...@apache.org on 2024/03/09 17:17:36 UTC
(kvrocks) 01/01: trying to use mget in SADD
This is an automated email from the ASF dual-hosted git repository.
maplefu pushed a commit to branch try-to-use-mget-in-inserting
in repository https://gitbox.apache.org/repos/asf/kvrocks.git
commit 067950e7424f4dcdb59e312b3a1a418b56dd800f
Author: mwish <an...@qq.com>
AuthorDate: Sun Mar 10 01:17:22 2024 +0800
trying to use mget in SADD
---
src/types/redis_set.cc | 18 +++++++++++++++---
1 file changed, 15 insertions(+), 3 deletions(-)
diff --git a/src/types/redis_set.cc b/src/types/redis_set.cc
index 35403b88..4b127f28 100644
--- a/src/types/redis_set.cc
+++ b/src/types/redis_set.cc
@@ -68,14 +68,26 @@ rocksdb::Status Set::Add(const Slice &user_key, const std::vector<Slice> &member
WriteBatchLogData log_data(kRedisSet);
batch->PutLogData(log_data.Encode());
std::unordered_set<std::string_view> mset;
+ std::vector<std::string> set_subkeys;
+ std::vector<Slice> set_subkeys_slice;
for (const auto &member : members) {
if (!mset.insert(member.ToStringView()).second) {
continue;
}
std::string sub_key = InternalKey(ns_key, member, metadata.version, storage_->IsSlotIdEncoded()).Encode();
- s = storage_->Get(rocksdb::ReadOptions(), sub_key, &value);
- if (s.ok()) continue;
- batch->Put(sub_key, Slice());
+ set_subkeys.push_back(std::move(sub_key));
+ set_subkeys_slice.emplace_back(set_subkeys.back());
+ }
+ std::vector<rocksdb::PinnableSlice> dummy_values(set_subkeys_slice.size());
+ std::vector<rocksdb::Status> mget_status(set_subkeys_slice.size());
+ storage_->MultiGet(storage_->DefaultMultiGetOptions(), metadata_cf_handle_, set_subkeys.size(),
+ set_subkeys_slice.data(), dummy_values.data(), mget_status.data());
+ dummy_values.clear();
+ set_subkeys_slice.clear();
+ set_subkeys.clear();
+ for (const auto &status : mget_status) {
+ if (!status.ok() && !s.IsNotFound()) return status;
+ if (status.IsNotFound()) continue;
*added_cnt += 1;
}
if (*added_cnt > 0) {