use*_*286 5 memcached caching spymemcached
我在 Memcached 中存储了一个大小为 7-10MB 的对象,在放置该对象后,尝试检索它。在这种情况下我会遇到缓存未命中的情况。知道为什么吗?该解决方案适用于较小的物体尺寸。
背景信息:
我使用 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);
}
Run Code Online (Sandbox Code Playgroud)
我遇到很多失败,其中 getSyncKeys 需要大约 700 毫秒才能获取一个密钥。知道为什么会发生这种情况吗?仅对于大物体才能观察到这种情况。<1MB 的较小对象可以正常工作并在 ~2ms pAvg 内返回数据。这些是良好的 m4.2xlarge EC2 主机,具有高网络性能。另外,我的 TCP 重传段图飙升至 1500/分钟,这看起来很可疑。
默认情况下,memcached 只会存储最大 1MB 的对象:
许多人要求 memcached 能够存储大于 1MB 的项目,虽然通常建议不要这样做,但现在命令行上支持它。
您可以使用 -I 选项来增加此值。
在你的情况下,你需要设置-I为10m. 您正在使用 AWS,因此如果您运行自己的 memcached 服务器,您将能够自己执行此操作,但如果您使用 AWS Elasticache,则需要创建一个参数组,将max_item_size1MB 更改为( 1048576) 到 10MB ( 10485760) 并将其应用到需要重新启动的 Elasticache 集群。
| 归档时间: |
|
| 查看次数: |
4147 次 |
| 最近记录: |