一个简单的数据库选择查询检索信息(为简单起见,将其称为 page_id ),以便为我构建的应用程序上的不同用户构建网页。我最近了解了Memcached并找到了this有用的帖子。
假设2个用户(A和B,使用不同的机器/浏览器)使用我编写的应用程序。假设用户A是按时间顺序排列的第一个用户,B是第二个用户。
假设有这样的流程:
$ID = 1000; // $ID retrieves the page_id to build the page
if (Cache::has('page_id')) {
$pageID = Cache::get('page_id');
} else {
$sql = DB::table('mytable')->select('page_id')->where('id', $ID)->first();
$pageID = $sql->page_id;
Cache::forever('page_id', $pageID);
}
//Now build the page using $pageID
这是问题所在。用户A在第一次访问页面时填充缓存,但如果用户A重新加载或重新访问同一页面,则缓存将提供 page_id 。但是用户B怎么样? (用户B在用户A之后访问同一页面,用户B使用不同的机器和浏览器)现在进行类比,我知道我们的CDN向用户A和B提供缓存的图像/资源。同样,此处,应用程序缓存是否也为用户B提供 page_id ,或者用户B是否从数据库查询中获取 page_id ?
答案 0 :(得分:1)
对于任何特定的缓存密钥,所有用户都将获得相同的数据。
出于这个原因,重要的是如果您存储的内容类似于用户的个人资料信息,您不希望使用profile
等缓存密钥存储它 - 您希望将其存储为唯一的密钥名称,如profile-123
(其中123是用户的ID)。