是这样得
//这里面执行判断是否存在缓存
$res = redis -> get("xxx");
if($res != null){
//返回缓存结果
return $res;//缓存返回
}
$res = db -> query("select * ...")//假设这句要3秒
redis -> setex("xxx",3600,$res)//保存到缓存,3600时间
//返回查询结果
return $res;
大概意思是这样的,就是我先从缓存取,没有就从数据库取,且存到缓存中,方便下次再去取。
但是问题就来了,假设我有千万并发,xxx 这个key存在3600,3600时间后自动销毁,必须得重新从数据库获取,而这句sql要3秒,3秒钟并发了几千万,就是查了几千万次数据库,必须得第一条成功缓存下来,后续的才不会跳过缓存返回那句,但这期间3秒却足以使服务器垮了,我想问的是怎样才能只访问一次数据库,其他那几千万访问都是从缓存取。
蛊毒传说
LEATH
蝴蝶不菲
波斯汪
慕容3067478
慕容森