node 可以这样来当缓存用么,求提意见
发布于 10 年前 作者 Hi-Rube 5381 次浏览 最后一次编辑是 8 年前

为了减轻数据库压力,但不用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 回复

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

@peiweippww - -! 主要是没有memcache 和 redis 啊… 为什么不建议node当缓存服务器来用哈

@Hi-Rube node 用的是v8有内存限制,如果你要用,建议用buffer吧

@chloe new 一个 buffer 使用堆外内存就没有限制了吧~~

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

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

缓存请使用单核心。

额,多个进程就有问题了

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

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

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

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

@JacksonTian 恩,问题很多

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

  1. lru-cache
  2. node-cache

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

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

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

回到顶部