一个简单封装的的nodejs缓存对象

我们在日常编码中,经常会用到缓存,而一个有效的缓存管理,也是大家必不可少的工具。而nodejs没有内置专用的缓存对象,并且由于js的作用域链的原因,很多变量使用起来容易出错,如果用一个通用的缓存管理起来,会方便很多,于是就手写了一个简单的nodejs缓存对象,并且可以指定变量保存时间。代码如下:

javascript 复制代码
exports.cache = (function(){
    function MyCatch(isClear){
        var __cache = {};
        var __clearable = !!isClear;
        this.set = function(name, value, expireTime){            
            __cache['key_' + name] = {
                expire: expireTime || 36000000, // 默认有效时间10小时, 36000000
                expTime: (new Date()).getTime() + (expireTime || 36000000),
                data: value
            };
        }

        this.get = function(name) {
            var che = __cache['key_' + name];
            if(che && __clearable){
                var now = (new Date()).getTime();
                if(che.expTime < now ){
                    delete __cache['key_' + name];
                    che = null;
                }else{
                    che.expTime = now + che.expire;
                }
            }
            return che
        }

        this.del = function(name) {
            delete __cache['key_' + name];
        }
    }
    return new MyCatch(true);
})();

这个版本的缓存对象,是在用户取对象时,判断是否过期并消除过期对象。还有一个版本,采用setInterval方法自动消除过期对象,代码如下:

javascript 复制代码
exports.cache = (function(){
    function MyCatch(isClear){
        var __cache = {};
        
        this.set = function(name, value, expireTime){
            __cache[name] = {
                expire: expireTime || 900000, // 默认有效时间15分钟, 900000毫秒
                expTime: parseInt((new Date()).getTime() / 1000, 10) + (expireTime || 900000),
                data: value
            };
        }

        this.get = function(name) {
            var cache_value = __cache[name];
            __cache[name] && (cache_value.expTime = parseInt((new Date()).getTime() / 1000, 10) + cache_value.expire);
            return cache_value
        }

        this.del = function(name) {
            delete __cache[name];
        }

        if(isClear){
            var list = __cache;
            setInterval(() => {
                var currTime = parseInt(new Date().getTime / 1000, 10);
                for(var key in list){
                    var che = list[key];
                    // 
                    if(che.expTime == 0){
                        continue;
                    }
                    if(che.expTime < currTime ){
                        delete __cache[key];
                    }
                }
            }, 10000);
        }
    }
    return new MyCatch(true);
})();

两种方法各有优缺点,大家可以根据个人喜好选择使用,或根据自己意愿修改。

相关推荐
玄芯散人2 小时前
【筑基·047】内存Hierarchy:寄存器到硬盘的速度差
缓存·内存·计算机基础
xhbh6664 小时前
中小企业 Redis 运维,如何安全归档 RDB、AOF 备份文件?
运维·数据库·缓存·数据备份·文件备份·同步备份·号码备份
太子釢6 小时前
AI 开发个人记账 App(服务端篇)
node.js·ai编程
用户64340495148519 小时前
Elpis 项目构建工具与前端基建实践总结
node.js
FungLeo9 小时前
成为全栈·Node 后端篇·后端测试策略:单元、集成与测试数据库
单元测试·node.js·集成测试·测试策略·成为全栈·测试数据库
FungLeo10 小时前
成为全栈·Node 后端篇·评论内容安全:敏感词过滤、三态审核与级联删除
node.js·敏感词过滤·成为全栈·评论内容安全·评论审核·级联删除
Wang's Blog11 小时前
Java框架快速入门: Spring Security+OAuth2之多因子认证缓存服务
java·spring·缓存
雪芽蓝域zzs11 小时前
第三十六节:keep-alive 页面缓存(Vue3 + 后台管理系统)
前端·vue.js·缓存
我是苏苏11 小时前
Redis开发09:Windows系统下主从复制的配置教程
数据库·redis·缓存
FungLeo21 小时前
成为全栈·Node 后端篇·阅读量防刷:去重、冷却与计数写分离
node.js·读写分离·数据去重·接口防刷·成为全栈·数据冷却