Tag: caching控制

同时调用caching的hapi服务器方法会发生什么情况?

假设我有一个服务器方法 server.method('foo', foo, { cache: { expiresIn: ###; } }); 假设第一次调用foo需要15秒。 如果第二个请求在第一个请求调用它几秒钟后调用server.methods.foo()会怎样呢?

所需模块相同,path不同,variables不共享

我真的失去了如何工作,我试图find真相。 Nodejs文档说,每次你需要相同的模块(不同的path或不同),你会得到相同的对象。 但对我来说,即使我需要相同的模块,这也不是同一个对象。 我已经创build了一个简单的项目来尝试这个,一个内存caching系统。 首先我们有主文件,第一个testing文件添加一个项目,第二个testing文件获取添加项目。 //main.js var exports = module.exports = {}; var debug = require("debug")("memcache:main"); var CACHE = {}; debug(CACHE); exports.set = addItem; exports.get = getItem; function addItem(key, value) { debug(key); debug(value); CACHE[ key ] = value; debug(CACHE[ key ]); } } function getItem(key) { debug(key); debug(CACHE[ key ]); return CACHE[ key ]; } […]

我已经更新了github上的数据,但节点模块请求仍然得到旧数据

我把一些数据放在github上。 我使用节点模块“请求”从中获取数据。 我在github上更新数据后。 nodejs仍旧得到大约五分钟的旧数据。 这是我的代码的一部分。 var url = "https://raw.githubusercontent.com/Larry850806/facebook-chat-bot/master/db.json"; request({ url: url, json: true }, function(error, response, body){ if (!error && response.statusCode === 200) { console.log(body); // Print the json response // after I update data, body still get old data } }); 我想这是因为有一个caching。 所以我不能得到“真实”的数据,而是旧的数据。 有没有办法获得最新的数据?

节点js中的LRUcaching

我需要为我的项目实施caching(对于我的组织),我们打算有一个内存LRUcaching,我有一些包,但我不知道授权条款,我发现最好的是这个 https://www.npmjs.com/package/lru-cache 但是在这里,当我声明我的caching为时,我正面临一些问题 var LRU = require("lru-cache") , options = { max: 2 , length: function (n, key) { return n * 2 + key.length } , dispose: function (key, n) { n.close() } , maxAge: 1000 * 60 * 60 } , cache = LRU(options) console.log(cache.length) cache.set(1,1) cache.set(2,2) cache.set(3,3) console.log(cache.length) console.log(cache.get(1)) console.log(cache.get(2)) console.log(cache.get(3)) console.log(cache) […]

当用正则expression式search时,redis的响应时间很长

我使用redis作为我的主数据库(mongodb)caching系统。 一切工作正常,直到caching的文件数越来越大,例如15K文件caching后,redis响应时间增加。 这是我在Redis中的关键 价值 key: userId_123_username_test_email_test@gmail.com value: JSON.stringfy(userobject) 正如我在标题中说的,当我试图find与正则expression式的文件,响应时间增加。 我正在寻找索引文件,我发现这篇文章 根据这篇文章我发现,我可以设置年龄字段的索引,但实际上我需要设置电子邮件或用户名索引 HMSET user:1 id 1 username antirez ctime 1444809424 age 38 ZADD user.age.index 38 1 也试试这个: ZADD user.username.index antirez 1 返回错误: ERR值不是有效的浮点数

Node.js表示应用程序caching/缓慢页面加载(swig模板引擎)

我正在将我的apache站点(在bluehost上)转移到node.js(在heroku上),并且注意到它运行速度比较慢。 我想知道这是一个caching问题,或者我可能做错了什么。 这里是关于heroku的网站: http : //ak-web-prod.herokuapp.com/ 这里是bluehost上的网站: http : //ardentkid.com 如果你注意到,页面在浏览网站时会闪烁白色(这就是为什么我认为这可能是一个caching问题)。 我为以下设置了快速configuration: app.enable('view cache'); 似乎没有改变任何东西。 有人有主意吗? 这是我的应用程序configuration app.configure(function(){ app.set('config', config); app.set('views', __dirname + '/views'); app.set('view engine', 'html'); app.set('db', db); app.set('port', process.env.PORT || 3000); app.engine('.html', cons.swig); app.use(express.logger('dev')) app.use(express.favicon(__dirname + '/public/img/favicon.ico')); app.use(express.cookieParser()) app.use(express.bodyParser()) //enables req.body app.use(express.methodOverride()) //enables app.put and app.delete (can also just use app.post) app.use(express.session({ secret: […]

SailsJS覆盖模型方法

我将caching(redis)添加到我的项目中,并希望将其编码到模型逻辑中而不是控制器中。 我需要覆盖模型方法,并在那里添加caching的逻辑。 我知道我可以重写某些方法,如find和findOne但我不知道该返回什么。 示例(伪) findOne: function () { cache.get(key, function (err, data) { if (data === null) // No cache data // get the data and return it else // return the cache data }); } 问题是这些模型方法不只是返回数据,而是返回模型本身的一个实例(用于链接)。 不确定如何返回数据,以及如何获取数据,如果它尚未设置。 有没有人做过这样的事情?

在NodeJS上使用Express时 – View Cache如何工作?

Express API: 视图caching:启用视图模板编译caching,默认在生产环境中启用 我有两个问题: 在app.js view cache没有明确地设置在开发块,应该是? 这个caching机制是如何工作的; memcache是​​不是一样?

Travis CIcaching:忽略来自caching的特定文件夹/文件

我在.travis.yml有以下configuration: language: node_js node_js: – '5.0.0' sudo: false cache: bundler: true directories: – node_modules 我的一个软件包是一个Github分支,内容改变但版本保持不变。 发生什么事情是caching不失效,在这一点上没有任何错误。 但是我想知道是否有一种方法可以从caching构造中排除一个特定的文件夹,如下所示: language: node_js node_js: – '5.0.0' sudo: false cache: bundler: true directories: – node_modules – !node_modules/grommet 其中!node_modules/grommet将被从caching索引中排除。 我尝试使用before_cache ,如此处所述。 但没有运气。 任何帮助赞赏…

caching快速响应

我有一些真正麻烦的快速caching响应…我有一个端点,得到了很多请求(大约5k rpm)。 这个端点从mongodb中获取数据,并加快速度我想caching完整的json响应1秒,这样每秒只有第一个请求到达数据库,而其他请求则来自caching。 当抽象出问题的数据库部分时,我的解决scheme看起来像这样。 我在redis中检查caching的响应。 如果发现我服了它。 如果没有,我生成它,发送它并设置caching。 超时模拟了数据库操作。 app.get('/cachedTimeout', function(req,res,next) { redis.get(req.originalUrl, function(err, value) { if (err) return next(err); if (value) { res.set('Content-Type', 'text/plain'); res.send(value.toString()); } else { setTimeout(function() { res.send('OK'); redis.set(req.originalUrl, 'OK'); redis.expire(req.originalUrl, 1); }, 100); } }); }); 问题是这不仅会使第一个请求每秒都打到数据库。 相反,在我们有时间设置caching(100毫秒之前)之前,所有请求都会到达数据库。 当真实的负载增加到这个时候,真正的响应时间大约是60秒,因为很多请求都落后了。 我知道这可以用像varnish反向代理解决,但目前我们正在主持heroku这复杂这样的设置。 我想要做的是在express中做一些反向代理caching。 我想这样做,以便在初始请求(生成caching)之后进入的所有请求将等待caching生成完成,然后再使用相同的响应。 这可能吗?