【问题标题】:memcached usage patternsmemcached 使用模式
【发布时间】:2012-10-24 04:51:31
【问题描述】:

我正计划在我的网站中注入一个缓存系统,将在不同的层(数据、表示,可能在其他地方)使用它。作为我的堆栈 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

【问题讨论】:

  • 您能否举例说明您计划如何与应用程序中的缓存进行交互?我想我没有遵循“其他键依赖”的意思。
  • 我用一些伪代码更新了问题

标签: caching architecture amazon-web-services memcached


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-21
    • 1970-01-01
    • 2016-09-14
    • 2011-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多