Skip to content

Commit 5d5bfd4

Browse files
author
wuxianrong
committed
ensure ZADD keeps the last score for duplicate members in a single command to align with Redis behavior
1 parent 3117caa commit 5d5bfd4

1 file changed

Lines changed: 9 additions & 5 deletions

File tree

src/storage/src/redis_zsets.cc

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -183,13 +183,17 @@ Status Redis::ZAdd(const Slice& key, const std::vector<ScoreMember>& score_membe
183183
*ret = 0;
184184
uint32_t statistic = 0;
185185
std::unordered_set<std::string> unique;
186-
std::vector<ScoreMember> filtered_score_members;
187-
for (const auto& sm : score_members) {
188-
if (unique.find(sm.member) == unique.end()) {
189-
unique.insert(sm.member);
190-
filtered_score_members.push_back(sm);
186+
std::list<storage::ScoreMember> mid_score_members;
187+
for (auto it = score_members.rbegin(); it != score_members.rend(); ++it) {
188+
if (unique.find(it->member) == unique.end()) {
189+
unique.insert(it->member);
190+
mid_score_members.push_front(*it);
191191
}
192192
}
193+
std::vector<ScoreMember> filtered_score_members;
194+
for (auto &item : mid_score_members) {
195+
filtered_score_members.push_back(std::move(item));
196+
}
193197

194198
char score_buf[8];
195199
uint64_t version = 0;

0 commit comments

Comments
 (0)