]> git.saurik.com Git - redis.git/commitdiff
binary safe keys ready implementation of RANDOMKEYS
authorantirez <antirez@gmail.com>
Wed, 21 Apr 2010 09:31:29 +0000 (11:31 +0200)
committerantirez <antirez@gmail.com>
Wed, 21 Apr 2010 09:31:29 +0000 (11:31 +0200)
redis.c

diff --git a/redis.c b/redis.c
index 1d3958abd74c9e21983eee70f53abed4076b14db..31c6f5ca98130d5e3ecf9a2773ea7b7e090626c9 100644 (file)
--- a/redis.c
+++ b/redis.c
@@ -4234,18 +4234,25 @@ static void selectCommand(redisClient *c) {
 
 static void randomkeyCommand(redisClient *c) {
     dictEntry *de;
+    robj *key;
 
     while(1) {
         de = dictGetRandomKey(c->db->dict);
         if (!de || expireIfNeeded(c->db,dictGetEntryKey(de)) == 0) break;
     }
+    
     if (de == NULL) {
-        addReply(c,shared.plus);
-        addReply(c,shared.crlf);
+        addReply(c,shared.nullbulk);
+        return;
+    }
+
+    key = dictGetEntryKey(de);
+    if (server.vm_enabled) {
+        key = dupStringObject(key);
+        addReplyBulk(c,key);
+        decrRefCount(key);
     } else {
-        addReply(c,shared.plus);
-        addReply(c,dictGetEntryKey(de));
-        addReply(c,shared.crlf);
+        addReplyBulk(c,key);
     }
 }