CNode

node 可以这样来当缓存用么,求提意见

HHi-Rube发布于12 年前最后回复10 年前18 回复6070 浏览0 收藏

为了减轻数据库压力,但不用redis 或 memcache 不知道可行否 Data = new Object(); build();

function build(){

Data = new Object();
Data.repertory = new Array();

Data.del = function (key, value){
    if (typeof Data.repertory[key] == "undefined") {
        return true;
    }

    delete Data.repertory[key];
    return true;
}

Data.set = function (key, value){
    Data.repertory[key] = value;
    return true;
}

Data.get = function (key){
    if (typeof Data.repertory[key] == "undefined") {
        return false;
    }
    return Data.repertory[key];
}

Data.check = function (key, value){
    if (typeof Data.repertory[key] == "undefined"){
        return false;
    }

    if (Data.repertory[key] == value){
        return true;
    } else {
        return false;
    }
}

Data.inc = function (key, value){
    if (typeof Data.repertory[key] == "undefined"){
        return true;
    }

    Data.repertory[key] += value;
    return true;
}

Data.dec = function (key, value){
    if (typeof Data.repertory[key] == "undefined"){
        return true;
    }

    Data.repertory[key] -= value;
    return true;
}

Data.push = function (key, value){
    if (typeof Data.repertory[key] == "undefined"){
        Data.repertory[key] = new Array();
    }

    Data.repertory[key].push(value);
    return true;
}

Data.fun = function(fun){
    fun(Data.repertory);
}

Data.remove = function (key, value, flag){
    if (typeof Data.repertory[key] == "undefined"){
        return true;
    }

    var i;
    if (flag){
        for (i = 0; i<Data.repertory[key].length; i++){
            if (Data.repertory[key][i][flag] == value){
                Data.repertory[key].splice(i, 1);
                break;
            }
        }
    }  else {
        for (i = 0; i<Data.repertory[key].length; i++){
            if (Data.repertory[key][i] == value){
                Data.repertory[key].splice(i, 1);
                break;
            }
        }
    }
    return true;
}

}

查看回复

回复 (18)

P
peiweippww#1·12 年前

缓存就是把临时数据存在内存,node当然可以做,如果只是静态数据(即不会更改的配置信息)可以这么干,但是你要把node当缓存服务器来用,不建议这么做,像memcache、redis这样可以做缓存的,在功能上具有很大的弹性,性能又做了很多优化,何必重复造轮子了。

T
think2011#5·12 年前

看不懂,似乎很高级的样子。

H
Hi-Rube#6·12 年前

感觉如果不控制内存限制, 很容易造成内存泄漏, 还是不用了~

M
MiguelValentine#7·12 年前

缓存请使用单核心。

H
Hi-Rube#8·12 年前
引用 MiguelValentine缓存请使用单核心。

额,多个进程就有问题了

J
JacksonTian#9·12 年前

N个用户一进来,你的内存就满了。

H
Hi-Rube#11·12 年前
引用 JacksonTianN个用户一进来,你的内存就满了。

@JacksonTian N 是要有一定数量啊,,,, 适当地加些限制和回收策略,还是可以谨慎一试吧

H
Hi-Rube#12·12 年前
引用 dead-horsehttps://www.npmjs.org/package/lru cache

@dead-horse 额像android里的硬引用

J
JacksonTian#13·12 年前
引用 JacksonTianN个用户一进来,你的内存就满了。

@Hi-Rube 如果不能限定这个N。就最好不要用。

H
Hi-Rube#14·12 年前
S
slclub#15·10 年前

这是在内存中,一个执行流有效,当第二个请求的人来了;它就无效了吧;

Y
yaochun#16·12 年前

大致看了一下,推荐一下我用过的两个包:

  1. lru-cache
  2. node-cache

其实虽然和那些真正存储媒介相比有差异,但是这种缓存思维是肯定有一定好处的

T
tulayang#18·12 年前

如果是考虑tcp请求延迟,还不如在nodejs同一个服务器上装个redis当缓存。 js的计算效率始终是赶不上c c++编写的数据库的。

参与回复
登录后即可参与回复。登录