使用vig-cache提升你的nodejs服务器性能达到30倍以上

Author Avatar calidion 发表于 • 2017年05月01日 11:14 • 共 • 290 • 次浏览

服务器的性能除了语言的速度相关外,更大的问题其实是在缓存的处理上。

提升几十倍,甚至上百倍的性

通过缓存的处理可以帮助服务器的性能提升几十倍,甚至上百倍。

所以下面我们来介绍一个基于express的缓存包vig-cache,可以帮助你的服务器提升至少10倍的速度。

基于vig框架, 兼容express

vig-cache是为vig框架而开发的。

但是因为vig框架是express兼容的,所以任何基于express的框架都可以使用。

无需要指定键盘名,自动帮你生成

通常我们在使用缓存时需要自己想办法设置key名,而vig-cache在使用时完全不需要自己想名字。他会基于你的访问地址,以及你的个人信息运动为你生成好缓存,这样当你访问成功后,再回来访问你访问过的页面,速度就会非常快。从而提搞系统的吐吞量。

支持一次JSON,同时支持String

由于redis缓存的特殊性,通常我们是直接缓存字符串的,但是对于相对复杂的网站,可能需要存储多个键值的,所以支持一级JSON是很有必要的。但是这个一次JSON的内容要求也是字符串。

所以要注意缓存的内容是最直接的内容,不是还需要计算的内容,否则就会消耗计算时间,缓存的意义就变小了

使用简单方便

引入

// for ts
import { KVCache } from "vig-cache";
import * as redis from "redis";
// for js
const KVCache = require('vig-cache').KVCache;
const Redis = require("redis");

配置Redis

let config = {
  host: '127.0.0.1',
  port: 6379,
  db: 0
};
let redis = Redis.createClient(config);

创建KVCache对象

const cache = new KVCache(redis);

基于JSON的存取

// JSON storage
await cache.setJSON(req, user, {value: 100});
await cache.getJSON(req, user);

基于字符串的存取

// String storage

await cache.set(req, user, 'string');
let saved = await  cache.get(req, user');
await cache.clear(req);   // For Both JSON and String

与express配合使用

// with Expressjs

cache.attach(app)

app.get('/', function(req, res) {
	 
	 // 这里获取缓存直接返回
  req.cache.getJSON(req, user).then( function(data) {
	  if (data && data.text) {
		  return res.send(data.text);
		}
	  // 这里注意使用的字段要统一,同时必须保存文本。
    req.cache.setJSON(req, user, {text: 'toBeCached'}).then(function(error) {
      res.send('toBeCached');
    });
});

这样我们的加速效果就出来了。

测试效果

测试的网页是: https://forum.webfullstack.me/ 的首页。

在加缓存前,得到的结果是约12.98个请求每秒。

Requests per second:    12.98 [#/sec] (mean)

在加缓存后,得到的结果是约307.32个请求每秒。

Requests per second:    307.32 [#/sec] (mean)

而测试/thread/visit/:id页的结果提升的效果更加明显,部分页面直接从 10多次每秒直接提升到约600多次每秒。 大约提升了60倍。

所以性能提升了很多,效果是很明显的。

小结

缓存是最简单有效的提升性能的方法,如果你对提升后的情能还不满意,你可能就需要考查更加深入的问题了。

包括代码的以前调用存在的问题。如何再做代码的优化等等。希望vig-cache可以帮助你快速的解决你所遇到的问题。

问题与交流

技术交流+

nodejs全栈开发群: 423652352

开源贡献+

nodejs开源项目交流群: 312685910

问题与投稿:

向我们的公众号反馈: frontend-guru

田一块Web全栈公共号关注的是:1、正确性 2、前沿性 3、纠正性 4、重要性

如果你也持同样的态度,欢迎您的关注。

共有1个红包,共5
  1. calidion2017年05月01日 14:48 前创建了 5 元的红包; 正在等待提问者支付红包...
最后编辑于 • 2017年05月01日 14:10 •  

你尚未登录,无法进行回复。