学学Redis

数据占用内存比对

使用对象

function Person() {
    this.name = null;
    this.description = 'Person';
}

 

内存:

100w条数据写

for(var i = 0; i < 1000000; i++) {
    temp = new Person();
    temp.name = i;

//    client.set(i, JSON.stringify(temp));  //115.83m

//    client.set('PersonName'+i, temp.name);
//    client.set('PersonDescription'+i, temp.description);  //184.72m

//    client.hset('PersonName', i, temp.name);
//    client.hset('PersonDescription', i, temp.description);  //184.72m

    client.hmset('Person'+i,{'name':i, 'description':temp.description}); //131.1m
}

转成Json方式保存剩了一些Key和Field,节省部分空间。最后一种方法也节省了很多空间,估计式因为ziplist的作用。(ziplist原理暂时还没看懂)

修改Key的长度会显著的改变占用空间大小。

时间:

10w条数据写

同样如内存一样的4种保存策略,第一、第四种方法耗时明显小于第二、第三种。

分别耗时:4300ms, 8212ms, 8837ms, 4488ms

 

 10w条数据读,并生成model

采用第一种方法:

var count = 100000;
    createTime = Date.now();
    for(var i = 0; i < count; i++) {
        client.get('Person'+i, function(err, replies) {
            temp = JSON.parse(replies);
            temp.prototype = Person.__proto__;
            count--;
            if(count == 0) {
                console.log(Date.now()-createTime);
                client.flushall();
                client.quit();
            }
        });
    }

耗时:4073ms

第四种方法:

var count = 100000;
    createTime = Date.now();
    for(var i = 0; i < count; i++) {
        client.get('Person'+i, function(err, replies) {
            temp.name = replies.name;
            temp.description = replies.description;
            count--;
            if(count == 0) {
                console.log(Date.now()-createTime);
                client.flushall();
                client.quit();
            }
        });
    }

耗时:4152ms

 

总结:

第一种方法:对对象JSON序列化、反序列化使用,在空间、时间上表现优秀。

第四种方法:使用hash对对象序列化、反序列化,在空间、时间上表现稍逊JSON,但是更加灵活,更加方便查询,不过Model的代码工作量增加,但我认为式值得的。

个人更喜欢第四种方法。

posted @ 2013-09-24 20:42  JasonZXX  阅读(190)  评论(0编辑  收藏  举报