我們有一個高流量的網站,很像StackOverflow和memcache中的對象緩存。該網站使用PHP(CodeIgniter)和MySQL構建。如何防止緩存過期時數據庫被應用程序DDOSed?
每次TTL(生存時間)在作爲每個頁面加載的一部分的緩存對象上過期時,此時加載的所有頁面都會導致對數據庫的查詢,從而有效地對數據庫執行DDOS。
是否有某種方式只有一個頁面載入重新獲取數據,並讓其他頁面加載等待緩存被第一個更新?
我的第一個想法是讓一個隨機數發生器工作,讓一些頁面加載獲取數據,並讓其他人在重新檢查緩存之前等待一秒鐘。但一定有更好的辦法。
+1用於緩存考慮!然而,它會導致多個額外的查詢,因爲您將讓其他請求輪詢數據庫,直到您將頁面標記爲「重新放入緩存」 –
請參閱[避免踩踏牧羣](https://code.google.com/p/memcached /維基/ NewProgrammingTricks#Avoiding_stampeding_herd)。 – eggyal
@eggyal很多有趣的想法,謝謝。 – jorisw