Хранение больших объектов в Memcached - PullRequest
0 голосов
/ 30 июня 2018

Я сохраняю объект размером 7-10 МБ в Memcached и сразу после помещения объекта пытаюсь получить его. В этом случае я получаю ошибки в кеше. Есть идеи почему? Это решение работает для объектов меньшего размера.

Справочная информация:

Я использую Memcached для хранения набора крупных объектов размером приблизительно 7-10 МБ. По какой-то причине я не могу разбить этот объект на несколько меньших ключей. Я хочу, чтобы кэш был избыточным и теплым, и, следовательно, я использую немного сложную процедуру установки кеша, как описано ниже:

keySet = makeRedundantKeys(key) // Appends a unique num to the key
putAsync(keys in keyset)
while(!timeout || countNonNullKeys > desiredQuorumOfKeys) {
    countNonNullKeys = getSyncKeys(key in keySet)
    sleep(backoffTime);
}

Я получаю много сбоев, когда getSyncKeys требуется около 700 мсек, чтобы получить только один ключ. Есть идеи, почему это может произойти? Это наблюдается только для крупных объектов. Меньшие объекты <1MB работают нормально и возвращают данные в ~ 2ms pAvg. Это хорошие хосты m4.2xlarge EC2 с высокой производительностью сети. Кроме того, мой график сегментов TCP Retransmitted достигает 1500 / мин, что выглядит подозрительно. </p>

1 Ответ

0 голосов
/ 10 сентября 2018

По умолчанию memcached будет хранить объекты размером до 1 МБ по умолчанию:

Многие люди просили, чтобы memcached мог хранить элементы размером более 1 МБ, хотя обычно рекомендуется этого не делать, теперь это поддерживается в командной строке.

вы можете использовать опцию -I, чтобы увеличить .

В вашем случае вам нужно установить -I равным 10m. Вы используете AWS, поэтому, если вы используете свой собственный сервер memcached, вы сможете сделать это самостоятельно, но если вы используете AWS Elasticache, вам нужно будет создать группу параметров, изменив max_item_size от 1 МБ (1048576) до 10 МБ (10485760) и примените его к кластеру Elasticache, который требует перезагрузки.

...