我理解缓存的基本概念,
但有一点我无法理解,即使我看到了一些例子,
假设,
我的第一个请求是上午9点,现在新的更新信息进入缓存,然后是来自其他用户的另一个相同的内容请求,现在系统从缓存文件而不是DB获取内容,
示例1:我将缓存设置为1小时,
现在时间是早上9点,
上午9点:第一个请求:现在读取内容数据库并存储到缓存文件中, 9.15AM:第二个请求:现在系统从缓存中检索内容而不是从DB检索, 9.24am:在DB中修改了很少的内容,
9.30am:第三个请求:NOW系统从DB或Cache中检索内容,系统如何知道DB的更新,
这是我的疑问:
示例2:如果未设置到期时间:,
然后当系统检索并将新更新的内容从数据库存储到缓存文件时。
答案 0 :(得分:2)
简单:每当您更新数据库中的记录时,都会删除它的任何缓存副本。这会强制在下次请求记录时更新缓存。
它应该像这样工作:
$data = retrieveData($id);
retrieveData()
这样做:
$id
的数据是?好的,回来吧。更新数据时:
updateData($data);
updateData()
将新$data
保存到数据库。$data
的任何副本。这意味着:
答案 1 :(得分:2)
对于你所说的内容有两种可能的解释 - 一种是与数据库保持结果在内存中很难缓存。
另一方面,有HTTP缓存和它的外观,(假设你正在讨论HTTP缓存)你已经错了 - 使用HTTP缓存user1请求一个页面在3小时内到期,任何时候< em>他在接下来的3个小时内请求该页面没有命中来到您的服务器。对于每个用户来说(显然)是分开的 - 当user2到来时,他不知道用户1是谁或者他在他的缓存中有什么,所以user2从你的服务器请求数据,之后来自user2的未来请求可以从user2的缓存提供。
HTTP还有一种缓存未知生命周期数据的方法 - 每次用户请求页面时,他们都会添加If-Modified-Since: <Date last fetched/modified>
或If-None-Match: <server-specified hash>
标头。然后,如果内容未更改,服务器可以发送304 Not Modified
HTTP状态代码,而不必再次发送文件正文。