在Memcached中存储大型对象

时间:2018-06-30 01:19:27

标签: caching memcached spymemcached

我正在将大小为7-10MB的对象存储在Memcached中,并且在放置该对象之后,试图对其进行检索。在这种情况下,我会丢失缓存。知道为什么吗?此解决方案适用于较小的对象尺寸。

背景信息:

我正在使用Memcached存储一组大约7-10 MB大小的大型对象。由于某种原因,我无法将此对象拆分为多个较小的键。我希望缓存是多余的且温暖的,因此,我使用了一个稍微复杂的缓存放置过程,如下所述:

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花费大约700ms来获取一个密钥。知道为什么会发生这种情况吗?仅对于大型物体可以观察到这一点。小于1MB的较小对象可以正常工作,并以2ms pAvg的速度返回数据。这些都是具有较高网络性能的m4.2xlarge EC2主机。另外,我的“ TCP重传”段图峰值达到1500 / min,这似乎很麻烦。

1 个答案:

答案 0 :(得分:0)

默认情况下,默认情况下,memcached仅存储最大1MB的对象:

  

许多人要求memcached能够存储大于1MB的项目,尽管通常建议不要这样做,但现在命令行上支持它。

您可以use the -I option to increase this

根据您的情况,您需要将-I设置为10m。您正在使用AWS,因此,如果您正在运行自己的内存缓存服务器,则可以自己执行此操作,但是如果您使用的是AWS Elasticache,则需要创建一个参数组,更改{{ 1}}从1MB(max_item_size)到10MB(1048576),然后将其应用到需要重启的Elasticache集群。