【问题标题】:memcached - what is a good method to cache common queries, but also handle invalidation?memcached - 什么是缓存常见查询但也处理失效的好方法?
【发布时间】:2011-02-17 17:45:01
【问题描述】:

我了解需要一个像 DB_Get_Cached("sql string") 这样的函数来散列 SQL,以便在 memcached 中查找数据是否存在。

function DB_Get_Cached(string SQL)
 data = memcache_get_data(md5(SQL))
 if (!data)
   return DB_Get(SQL)
 end if
end function

什么是扩展它以处理数据失效或超时的好方法?

我正在考虑电子商务网站中的产品页面,或者他们个人资料中的用户详细信息。

谢谢

【问题讨论】:

  • 我只是在想你可能会导致缓存的实体在生存时间的基础上失效

标签: .net asp.net caching memcached


【解决方案1】:

您可以在密钥中使用某种全局版本 ID。例如,如果您有此键来表示产品 #1234 的数据:

data:products:1234

像这样向键添加版本 ID:

data:1:products:1234

然后,当您想要使缓存无效时,只需增加版本 ID。这将导致所有缓存键发生变化:

data:2:products:1234

【讨论】:

    【解决方案2】:

    不要在查询函数中缓存,而是在您处理结果的任何地方进行缓存。这甚至可以让你缓存后处理的请求(例如渲染的 HTML)。

    并且,作为缓存键,请使用有意义的名称,例如“page:menu”或“user:profile:USERID”。如果您想使其无效,这将允许您轻松删除缓存条目。

    【讨论】:

      猜你喜欢
      • 2016-06-12
      • 1970-01-01
      • 2022-01-11
      • 2014-11-09
      • 2016-09-09
      • 2023-04-03
      • 1970-01-01
      • 2016-02-12
      • 2017-06-26
      相关资源
      最近更新 更多