1
我看了一下Memcached的衆多導遊,然而,幾件事情還不清楚對我說:Memcached的鍵:一些澄清需要
1)我見過很多例子,看或多或少是這樣的:
$sql = "SELECT `name` FROM `users` WHERE `id` = 1;";
$memcache->set(md5($sql), $sql, false, 60);
$memcache->get(md5($sql));
然而,我有限的內存緩存的知識,我在這裏看到一個嚴重的缺陷:我不能用同樣的方法將數據存儲與INSERT/UPDATE
請求爲,在技術上,這將導致不同的哈希
作爲解決方案我想我可以使用這樣的東西:cre在一個類/功能,將執行以下操作:
class db {
function insert($sql, $ttl, $key) { // $key would be the name of the key I would manually generate for each query. To maintain uniqueness for each user where needed, could be user_id_keyname
$memcache->set($key, $sql, false, $ttl);
mysql_query($sql);
}
function sel($sql, $ttl, $key) {
if ($memcache->get($key)) then return $memcache->get($key);
else {
$memcache->set($key, $sql, false, $ttl);
return mysql_query($sql);
}
難道這是一個適當的方法來解決我的問題?真的很希望看到關於代碼的任何評論。 } }
謝謝你的回覆。我想要存儲'INSERT/UPDATE'請求的原因只是保持緩存是最新的。換句話說,無論緩存是否過期,如果MySQL條目已更新,緩存也會更新。我對於memcache的工作原理知之甚少,因此我迄今爲止閱讀的指南似乎有些太抽象,以至於我無法理解。 – 2012-04-22 14:49:12
這實際上不是緩存設計的目的:整個想法是,您可以多次重複使用SELECT查詢的輸出。也就是說,緩存用於確保您的服務器不必運行相同的查詢兩次。然而,在你的情況下,它必須運行相同的查詢兩次,因爲輸出應該是新鮮的。你可以做的是使任何你知道受到'INSERT' /'UPDATE'查詢影響的memcached密鑰無效,這意味着你的網站將始終得到最新的結果。但這樣做確實意味着您的網站不太適合緩存。 – Daan 2012-04-22 15:13:01
這是爲什麼?如果原始條目未更新,它仍會使用緩存的結果。此外,我正在考慮Memcache的** prime原因是我使用MySQL的多語言(因爲據我瞭解,.PO文件將加載整個網站的字符串,而MySQL查詢可以做索引搜索) – 2012-04-22 18:45:28