diff --git a/redis.c b/redis.c index 3077badb1562da0b7c3a166a5c60c2cb8db160a5..c8cb67f0c5c4c28c3eba14885d53200fd6ea76e0 100644 --- a/redis.c +++ b/redis.c @@ -4128,9 +4128,16 @@ static void msetGenericCommand(redisClient *c, int nx) { } for (j = 1; j < c->argc; j += 2) { - dictAdd(c->db->dict,c->argv[j],c->argv[j+1]); - incrRefCount(c->argv[j]); - incrRefCount(c->argv[j+1]); + int retval; + + retval = dictAdd(c->db->dict,c->argv[j],c->argv[j+1]); + if (retval == DICT_ERR) { + dictReplace(c->db->dict,c->argv[j],c->argv[j+1]); + incrRefCount(c->argv[j+1]); + } else { + incrRefCount(c->argv[j]); + incrRefCount(c->argv[j+1]); + } removeExpire(c->db,c->argv[j]); } server.dirty += (c->argc-1)/2;