0

我正计划在我的网站中注入一个缓存系统,将在不同的层(数据、表示,可能在其他地方)使用它。作为我的堆栈 LAMP 和我的基础设施 100% 在 AWS 上的云,我认为自然的选择是 Amazon Elasticache(memcached 的托管安装)。但...

令人惊讶的是——对我来说——我发现 memcached 完全缺乏依赖管理。我不需要像 ASP.Net 缓存 SqlDependency 或 FileDependency 这样的“高级”东西,但 memcached 也没有提供简单的其他键依赖,这对于构建大大简化失效过程的依赖树非常有用。

那么,据我所知,memcached 用于许多复杂的系统,我是否遗漏了什么?是否存在使这种缺乏无关紧要的使用模式?

谢谢

按要求更新,我添加了一些伪代码来澄清我的意思

dependency = 'ROOT_KEY';
cache:set(dependency, 0, NEVER_EXPIRE);

expire = 600;
cache:set('key1', obj1, expire, dependency);
cache:set('key2', obj2, expire, dependency);
...
cache:set('keyN', objN, expire, dependency); 

//later, when I have to invalidate
cache:remove(dependency); //this will cause all keyX to be invalidated too
4

1 回答 1

0

根据您问题中的示例,memcached(以及因此弹性缓存)不支持您正在寻找的任何类型的键元数据,您可以通过这些元数据关联这些键并将它们作为一个组进行操作。

我想如果您只有少数不同的“依赖项”,您可以简单地利用多个弹性缓存实例,这将允许您同时使每个实例/依赖项中的所有项目无效。当然,这最终可能会让您在 AWS 硬件成本方面付出比您想要的更多的成本,因为您只能以离散量增加缓存大小。这也将消除您在不知道查找发生的依赖项/实例的情况下进行缓存查找的能力。

对于您正在尝试做的事情,如果您正在寻找更多开箱即用的解决方案,您可以使用 MySQL/RDS 中的内存表之类的东西。当然,您不希望使用 RDS 高可用性功能或时间点恢复,因为它们会中断,因为它们需要写入磁盘。您基本上需要一个独立的 RDS 实例,除了这些内存表之外什么都不做。

然而,这些选项似乎都不完全适合您想要做的事情,因此您可能需要考虑调整您的方法(如果您想使用基本的 AWS 组件),或者在 EC2 上部署备用缓存系统.

于 2012-10-23T20:51:31.510 回答