Skip to content

Latest commit

History

11 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

node cache server

node缓存服务器,支持多级缓存,允许自定义store, 内置store包含 memory, redis以及阿里云OTS

安装

$ git clone https://github.com/wujjpp/node-cache-server.git

运行

服务端

$ cd server
$ npm start

运行测试客户端

$ cd client
$ npm run benchmark

客户端SDK使用

varcache=require('./client/cache');varclient=cache.create({uri: 'http://127.0.0.1:9999',// 缓存服务器地址apiKey: '123456789'// 必须与服务端的apiKey保持一致});client.get("category-name","the-key",function(){returnnewPromise(function(resolve,reject){// Load data from database, for simple case, we just hardcode returned valueresolve({id: 'foo',name: 'Jane'});});}).then(function(data){console.log('result:',data);})

上面的代码执行流程: client先会尝试从缓存服务器的category-name目录取key为the-key值。存在的情况下,直接返回对应对象,假如不存在,会执行第三个参数(即回调函数),去慢速介质(比如:数据库)查询数据,框架会将resolve的结果自动填充到缓存服务器,以备下次使用。

服务端配置

/server/configs/config.js 环境配置

'use strict';varenv='dev';//运行环境:dev, sit, uat, prod根据配置读取对应目录的cache.js配置文件varpath=require('path');var_=require('lodash');varglob=require('glob');varsharedConfig=require('./shared');varconfig={env: env};_.extend(config,sharedConfig);varconfigFiles=glob.sync(path.join(__dirname,env,'**','*.js'));// sync operation is requiremodule.exports=_.extend(config,_.chain(configFiles).map(function(o){returnrequire(o);}).reduce(function(o,n){return_.extend(o,n);},config).value());

/server/configs/(dev|sit|uat|prod)/cache.js 缓存store配置

module.exports={caches: [//一级缓存配置为内存{store: 'memory',ttl: 60*5,//expire time in seconds, 5 minsmax: 600,//max key count},//二级缓存配置成redis{store: 'redis',ttl: 60*10,//expire time in seconds, 10 minsignoreCacheErrors: false,//ignore storage errors//下面是redis相关设置host: "127.0.0.1",port: 6379,password: "xxxxxxxxx",db: 0},//三级缓存配置成阿里云的OTS{//阿里云OTSstore: 'ots',ttl: 60*20,//expire time in seconds, 20 minutesignoreCacheErrors: false,//ignore storage errors//下面是OTS相关设置accessKeyId: 'Mf7kHLKXXXXXXXXX',secretAccessKey: 'o3Qv0NdgjpXXXXXXXXXXXXXX',endpoint: 'http://cn-hangzhou.ots.aliyuncs.com',apiVersion: '2014-08-08',instance_name: 'cachetest',table_name: 'dev'}]};

根据实际情况进行调整,当然内存足够大的情况下,你可以直接使用memory,建议memory + redis, 这样缓存服务挂掉的情况下,可以使用redis作为backing store

关于ttl,ttl用来控制缓存过期时间,单位为“秒”,越靠前的缓存存储ttl值应该是越小

理论上越靠前的缓存存储器应该是读写速度应该越快,当然成本也是越高的。

/server/configs/shared.js 配置缓存服务器端口及apiKey

module.exports={port: 9999,//缓存服务器访问端口apiKey: '123456789'//API key};

Made with ♥ by Wu Jian Ping

About

nodejs多级缓存服务

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages