11月13, 2017

node cache数据

背景:公司账号接口没有提供模糊查询用户列表的功能,只提供了通过ID查询用户的功能,和相关人员沟通了一下,目前只能先查所有用户,再自己去filter处理。

因为公司员工是不可能时时发生变化的,像这种一天查询一次,已经差不多了。

所以当第二次、第N次查询时,理应是要从缓存里面去取,而不是再http重发请求。

方案大概有以下几个:

简单记录一下前面两个的做法:

lru-cache

// cache.js
const LRU = require("lru-cache");
const options = {
    max: 500,
    maxAge: 86400000    // 缓存一天
}

const cache = LRU(options);

module.exports = LRU(options);

使用:

cache.set("xx", [
     {},
     {}
]);
const data = cache.get("xx")

redis

首先电脑上要装一个redis。后台运行redis:

redis-server &

ioredis上给的一个工具挺不错的:

alt

ioredis使用:

var Redis = require('ioredis');
var redis = new Redis();

redis.set("123", JSON.stringify([1, 2, 3]), 'EX', 20);

最后一个参数20是表示”秒“,上面的lru-cache单位是毫秒。。这句话是表示设置key为123的一个数组字符串,20s后过期。

个人觉得redis的这个操作,存取对象,还得通过序列化与反序列化,确实麻烦。如果对象嵌套深的话,还不如存mongodb呢。

但redis胜在场景,比如说多台机器上,那么lru-cache就比较麻烦了。

结语

每个方案都有各自的优缺点,在使用时,不仅仅要考虑API的易用,更要考虑整个项目的将来的一个方向。

像我这些天在做登录权限的功能,就发现我这个代码写的狗屎了。没区分前台接口和后台管理中心接口,有些接口是前台可以用、后台管理中心接口也可以用,于是我之前就写成一个了。但要做权限功能时,发现这样是不行的,要做拆分啊!!

后台还是比较复杂的,今天一个同事丢给我一个disconf的node方案:node-disconf-client,这个还得抽时间看看,能否打通公司的disconf。一脸懵X中。。。

本文链接:www.my-fe.pub/post/node-cache-data.html

-- EOF --

Comments

评论加载中...

注:如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理。