首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >并发写入memcache

并发写入memcache
EN

Stack Overflow用户
提问于 2013-06-10 22:58:34
回答 1查看 1.1K关注 0票数 3

你能帮我解决我的问题吗?我有一些很慢的mysql查询,所以我将其结果缓存到memcache中。

我这样做:

代码语言:javascript
复制
$data = get_from_cache();
if (! $data) {
   $data = get_from_mysql();
   set_cache($data);
}

问题来了。有时我每秒有大约10个请求。因此,当我的缓存到期时,我有5-10个get请求同时启动这个缓慢的mysql查询。

你能推荐一个模式让我在php中创建一个互斥体,或者类似这样的东西,只对mysql做一个缓慢的请求吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-10 23:08:07

这就是所谓的狗堆问题。Strategy: Break Up The Memcache Dog Pile 描述了两种方法:

解决方案1:

  • 在将来设置缓存项的过期时间。
  • 嵌入使用该值序列化的“实际”超时。例如,将项设置为24小时后的超时,但嵌入的超时可能是未来的5分钟。从高速缓存执行get时,
  • 将确定过时的超时是否已过期,并在过期时立即设置将来的时间,然后按原样重新存储数据。这将关闭风险窗口。
  • 从数据库获取数据并使用最新值更新缓存。

解决方案2:

  • 在memcached中创建两个密钥:过期时间比正常稍长的主密钥+过期时间较早的过期密钥。
  • 在get上读取陈旧密钥。如果过时的密钥已过期,请重新计算并再次设置过时的密钥。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17026858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档