内存缓存响应:"bad command line format" 在 Google Cloud Platform 上使用 node.js 具有较大的值

Memcache response: "bad command line format" on Google Cloud Platform with large values using node.js

修改找到的示例 on the Google App Engine Documentation 以存储大字符串导致响应 Error: bad command line format

通常随后的请求会遇到 Error: Server at <IP>:11211 not available,就好像 set 函数中的某些东西短暂地使服务器离线。

在 GAE 的共享 Memcache 和专用 1GB(每秒 10,000 个 MCU/GB)中尝试 运行 没有区别。

多个 nodejs memcached 库以及大型缓冲区和 JSON 格式化值都 return 相同的错误。我的所有研究似乎都表明此错误往往来自 'key' 大于 250 个字符,但不是来自大值(因为下面的尝试远远低于 Memcache 配额和每个值 1MiB 的限制) .

这里有一个完整的 app.js 来演示:

'use strict';

var express = require('express');
var Memcached = require('memcached');

var app = express();

// The environment variables are automatically set by App Engine when running
// on GAE. When running locally, you should have a local instance of the
// memcached daemon running.
var memcachedAddr = process.env.MEMCACHE_PORT_11211_TCP_ADDR || 'localhost';
var memcachedPort = process.env.MEMCACHE_PORT_11211_TCP_PORT || '11211';
var memcached = new Memcached(memcachedAddr + ':' + memcachedPort);

app.get('/', function(req, res, next) {
  memcached.get('foo', function(err, value) {
    if (err) { return next(err); }
    if (value) {
        console.log('Exists');
      return res.status(200).send('Value: ' + value);
    }


    var str = "";

    // Make a big string
    var loops = 1000;
    // works with loops = 10, fails with loops = 1000
    for(var i = 0; i < loops; i++){
        str += "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    }

    memcached.set('foo', str, 60, function(err) {
      if (err) { return next(err); }
      console.log('Created');
      return res.redirect('/');
    });
  });
});

var server = app.listen(process.env.PORT || 8080, '0.0.0.0', function() {
  console.log('App listening at http://%s:%s', server.address().address,
    server.address().port);
  console.log('Press Ctrl+C to quit.');
});

可以使用 Google 云控制台表单在 Memcache 中手动设置相同的大字符串。检索值的后续调用也有效。我是否根据价值大小严重错误地计算了 MCU?

当 运行 在本地 (OSX) 时,我遇到零问题并且能够存储非常大的值。错误仅发生在已部署的代码中。非常感谢任何建议或指导。

Memcache 代理中目前存在一个错误,阻止写入超过 4kb 的值。中间有一个缓冲区正在截断混淆内存缓存服务器的数据包。目前,任何超过 4kb 的数据都应该存储在某种数据库中(cookie 也不起作用,因为 cookie 也不能存储超过 4kb)。问题解决后我会更新这个问题。

编辑:问题现在应该已修复。