緩存穿透和緩存雪崩mysql
緩存穿透redis
場景 通常來講,緩存穿透的場景發生在故意攻擊的場景下;好比說,原本查詢意見商品的序號是正數,可是請求方老是請求大量的負數過來,致使緩存無效,所有流量都打在了數據庫中,若是某一時刻流量過大,則會致使數據庫崩潰;sql
解決方案數據庫
僞代碼 ////方案一 //僞碼 string penetrate1(int ID,string str) {緩存
//使用布隆過濾器,後續專門寫一篇博客
if(存在)
{
redis操做
}
else
{
return NULL;
}
}
////方案二
//僞碼
string penetrate1(int ID,string str)
{
//假設能夠就是ID
int CacheTime = 30;
string CacheValue;
char cmd[128];
char sql[128];
memset(cmd,0,sizeof(cmd));
memset(sql,0,sizeof(sql));
sprintf(cmd,"get %d",ID);
redisReply* replay = (redisReply*)redisCommand(conn,cmd);
if(replay->type == REDIS_REPLY_ERROR)
{
//查詢數據庫
mysql_query(&mysql,sql);
MYSQL_RES *result= mysql_store_result(&mysql);
int row = mysql_num_rows(result);
//查詢爲空
if(row < 0)
{
//設置默認值
memset(cmd,0,sizeof(cmd));
sprintf(cmd,"set %d ''",ID);
redisReply* replay = (redisReply*)redisCommand(conn,cmd);
}
//數據庫數據同步到redis中
//set XX XX
redisReply* replay = (redisReply*)redisCommand(conn,cmd);
//返回數據
return 結果;
}
else
{
return replay->str;
}
}
複製代碼
緩存雪崩服務器
場景 基本咱們能想到的場景就是一些電商搶購的現象,通常就是好比12點開始,在1點的時候大量同時失效,這個時候就會形成緩存雪崩的現象;微信
解決方案學習
想了解學習更多C++後臺服務器方面的知識,請關注:spa
微信公衆號:====C++後臺服務器開發====code