diff --git a/src/server.c b/src/server.c index 2c3647db6..f3338f562 100644 --- a/src/server.c +++ b/src/server.c @@ -304,6 +304,7 @@ struct redisCommand redisCommandTable[] = { {"pfdebug",pfdebugCommand,-3,"w",0,NULL,0,0,0,0,0}, {"xadd",xaddCommand,-4,"wmF",0,NULL,1,1,1,0,0}, {"xrange",xrangeCommand,-4,"r",0,NULL,1,1,1,0,0}, + {"xlen",xlenCommand,2,"rF",0,NULL,1,1,1,0,0}, {"post",securityWarningCommand,-1,"lt",0,NULL,0,0,0,0,0}, {"host:",securityWarningCommand,-1,"lt",0,NULL,0,0,0,0,0}, {"latency",latencyCommand,-2,"aslt",0,NULL,0,0,0,0,0} diff --git a/src/server.h b/src/server.h index 1185d119e..c934d7f6e 100644 --- a/src/server.h +++ b/src/server.h @@ -2001,6 +2001,7 @@ void moduleCommand(client *c); void securityWarningCommand(client *c); void xaddCommand(client *c); void xrangeCommand(client *c); +void xlenCommand(client *c); #if defined(__GNUC__) void *calloc(size_t count, size_t size) __attribute__ ((deprecated)); diff --git a/src/t_stream.c b/src/t_stream.c index 9ca001d71..3474d4786 100644 --- a/src/t_stream.c +++ b/src/t_stream.c @@ -378,3 +378,12 @@ void xrangeCommand(client *c) { s = o->ptr; streamReplyWithRange(c,s,&startid,&endid,count); } + +/* XLEN */ +void xlenCommand(client *c) { + robj *o; + if ((o = lookupKeyReadOrReply(c,c->argv[1],shared.czero)) == NULL + || checkType(c,o,OBJ_STREAM)) return; + stream *s = o->ptr; + addReplyLongLong(c,s->length); +}