我理解需要像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
扩展它以处理数据失效或超时的好方法是什么?
我正在考虑电子商务网站中的产品页面或其个人资料中的用户详细信息。
由于
答案 0 :(得分:2)
不要在查询函数中缓存,而是在处理结果的任何位置缓存。这甚至可以允许您缓存后处理的请求(例如,呈现HTML)。
并且,作为缓存键,使用有意义的名称,例如'page:menu'或'user:profile:USERID'。如果要使缓存条目无效,这将允许您轻松删除缓存条目。
答案 1 :(得分:2)
您可以在密钥中使用某种类型的全局版本ID。例如,如果您有此键来表示产品#1234的数据:
data:products:1234
在键中添加版本ID,如下所示:
data:1:products:1234
然后,当您想要使缓存无效时,只需增加版本ID即可。这将导致所有缓存键更改:
data:2:products:1234