我将一个大小为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花了大约700毫秒才能得到一个密钥。知道为什么会发生这种事吗?只对大型物体观察到这一点。小于1MB的较小对象可以很好地工作,并在~2ms pAvg中返回数据。这些都是很好的m4.2×大型EC2主机,具有高的网络性能。另外,我的TCP重传段图的峰值高达1500/min,这似乎有点可疑。
发布于 2018-09-10 11:53:03
默认情况下,memcached默认只存储最多1MB的对象:
许多人要求memcached能够存储大于1MB的项,而通常建议不要这样做,现在命令行支持memcached。
你可以使用-I选项可以增加。
在您的情况下,您需要将-I设置为10m。您正在使用AWS,所以如果您正在运行您自己的memcached服务器,您将能够自己运行,但是如果您使用的是AWS,则需要创建一个参数组,将max_item_size从1MB (1048576)更改为10 1MB (10485760),并将其应用到需要重新引导的Elasticache集群中。
https://stackoverflow.com/questions/51110977
复制相似问题