Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 7 additions & 2 deletions src/t_set.c
Original file line number Diff line number Diff line change
Expand Up @@ -625,20 +625,25 @@ void sremCommand(client *c) {

if ((set = lookupKeyWriteOrReply(c, c->argv[1], shared.czero)) == NULL || checkType(c, set, OBJ_SET)) return;

if (set->encoding == OBJ_ENCODING_HASHTABLE) hashtablePauseAutoShrink(objectGetVal(set));
for (j = 2; j < c->argc; j++) {
if (setTypeRemove(set, objectGetVal(c->argv[j]))) {
deleted++;
if (setTypeSize(set) == 0) {
dbDelete(c->db, c->argv[1]);
keyremoved = 1;
break;
}
}
}
if (set->encoding == OBJ_ENCODING_HASHTABLE) hashtableResumeAutoShrink(objectGetVal(set));

if (deleted) {
signalModifiedKey(c, c->db, c->argv[1]);
notifyKeyspaceEvent(NOTIFY_SET, "srem", c->argv[1], c->db->id);
if (keyremoved) notifyKeyspaceEvent(NOTIFY_GENERIC, "del", c->argv[1], c->db->id);
if (keyremoved) {
dbDelete(c->db, c->argv[1]);
notifyKeyspaceEvent(NOTIFY_GENERIC, "del", c->argv[1], c->db->id);
}
server.dirty += deleted;
}
addReplyLongLong(c, deleted);
Expand Down
15 changes: 10 additions & 5 deletions src/t_zset.c
Original file line number Diff line number Diff line change
Expand Up @@ -1933,18 +1933,22 @@ void zremCommand(client *c) {

if ((zobj = lookupKeyWriteOrReply(c, key, shared.czero)) == NULL || checkType(c, zobj, OBJ_ZSET)) return;

if (zobj->encoding == OBJ_ENCODING_SKIPLIST) hashtablePauseAutoShrink(((zset *)objectGetVal(zobj))->ht);
for (j = 2; j < c->argc; j++) {
if (zsetDel(zobj, objectGetVal(c->argv[j]))) deleted++;
if (zsetLength(zobj) == 0) {
dbDelete(c->db, key);
keyremoved = 1;
break;
}
}
if (zobj->encoding == OBJ_ENCODING_SKIPLIST) hashtableResumeAutoShrink(((zset *)objectGetVal(zobj))->ht);

if (deleted) {
notifyKeyspaceEvent(NOTIFY_ZSET, "zrem", key, c->db->id);
if (keyremoved) notifyKeyspaceEvent(NOTIFY_GENERIC, "del", key, c->db->id);
if (keyremoved) {
dbDelete(c->db, key);
notifyKeyspaceEvent(NOTIFY_GENERIC, "del", key, c->db->id);
}
signalModifiedKey(c, c->db, key);
server.dirty += deleted;
}
Expand Down Expand Up @@ -2019,7 +2023,6 @@ void zremrangeGenericCommand(client *c, zrange_type rangetype) {
case ZRANGE_LEX: objectSetVal(zobj, zzlDeleteRangeByLex(objectGetVal(zobj), &lexrange, &deleted)); break;
}
if (zzlLength(objectGetVal(zobj)) == 0) {
dbDelete(c->db, key);
keyremoved = 1;
}
} else if (zobj->encoding == OBJ_ENCODING_SKIPLIST) {
Expand All @@ -2033,7 +2036,6 @@ void zremrangeGenericCommand(client *c, zrange_type rangetype) {
}
hashtableResumeAutoShrink(zs->ht);
if (hashtableSize(zs->ht) == 0) {
dbDelete(c->db, key);
keyremoved = 1;
}
} else {
Expand All @@ -2044,7 +2046,10 @@ void zremrangeGenericCommand(client *c, zrange_type rangetype) {
if (deleted) {
signalModifiedKey(c, c->db, key);
notifyKeyspaceEvent(NOTIFY_ZSET, notify_type, key, c->db->id);
if (keyremoved) notifyKeyspaceEvent(NOTIFY_GENERIC, "del", key, c->db->id);
if (keyremoved) {
dbDelete(c->db, key);
notifyKeyspaceEvent(NOTIFY_GENERIC, "del", key, c->db->id);
}
server.dirty += deleted;
}
addReplyLongLong(c, deleted);
Expand Down
Loading