提交 afd438df 编写于 作者: A antirez

previouse INCR implementation restored, was actually faster for some reson not...

previouse INCR implementation restored, was actually faster for some reson not fully clear at the moment
上级 d6107fd6
......@@ -144,24 +144,8 @@ void incrDecrCommand(redisClient *c, long long incr) {
o = lookupKeyWrite(c->db,c->argv[1]);
if (o != NULL && checkType(c,o,REDIS_STRING)) return;
/* Fast path if the object is integer encoded and is not shared. */
if (o && o->refcount == 1 && o->encoding == REDIS_ENCODING_INT) {
long long newval = ((long)o->ptr) + incr;
if (newval < 0 && newval >= REDIS_SHARED_INTEGERS &&
newval >= LONG_MIN && newval <= LONG_MAX) {
o->ptr = (void*) (long) newval;
touchWatchedKey(c->db,c->argv[1]);
server.dirty++;
addReplyLongLong(c,newval);
return;
}
/* ... else take the usual safe path */
}
/* Otherwise we create a new object and replace the old one. */
if (getLongLongFromObjectOrReply(c,o,&value,NULL) != REDIS_OK) return;
value += incr;
o = createStringObjectFromLongLong(value);
dbReplace(c->db,c->argv[1],o);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册