我正在将大小为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,这似乎很麻烦。
答案 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集群。