【问题标题】:Memcache configuration for expiration times过期时间的 Memcache 配置
【发布时间】:2012-09-04 09:49:58
【问题描述】:

假设我有 30 秒的缓存,生成缓存的 db 请求需要 2 秒,我每秒收到 100 个请求,当缓存需要刷新时会发生什么?

我怀疑我的数据库被击中 200 次。我想要发生的事情是让第一个通过,然后告诉其他人返回缓存,所以基本上在 30 秒之后,缓存的第一次尝试在这里什么也没说,但是剩下的得到以前存在的东西,直到让通过的人更新它。

我必须在应用程序级别执行此操作还是可以将 memcache 配置为执行此操作?

【问题讨论】:

    标签: memcached


    【解决方案1】:

    您需要在您的应用程序中构建此逻辑。当在 memcached 中找不到该项目时,只需从数据库中检索它,并在缓存中创建一个新项目。项目过期后,您需要从数据库中重新缓存该项目。

    [ get item from cache ] ----- yes
       |                           |
      no                        [ return item ]
       |
       |
    [ get item from database ] -- yes
       |                           |
      no                        [ store item in cache ]
       |                           |
    [ return not found ]        [ return item ]
    

    【讨论】:

    • 嘘!我刚刚进行了基准测试,我可以在缓存命中之间看到很多数据库命中。我在应用程序中处理它的方式是拥有两种长度的缓存 - 一种 30 秒,一种 60 秒。如果在 30 中没有命中,则去命中 db 并提高“命中 60”标志。当 db 返回刷新 30 和 60 缓存和降低标志时。假设没有数据库请求花费不超过 30 秒,则应该只在缓存之间命中一次。如果您可以将 memcache 上的生命周期配置为仅表示在 x 秒内不返回任何内容,那就太好了。
    猜你喜欢
    • 1970-01-01
    • 2010-11-27
    • 1970-01-01
    • 2011-01-27
    • 2012-05-19
    • 2013-03-09
    • 1970-01-01
    • 2016-09-17
    • 1970-01-01
    相关资源
    最近更新 更多