php緩存生成及更新實現參考哦

<?php
//若是在find/findAll裏傳入了參數,則該參數即爲key
ORM::factory('article')->where('user_id', '=', '2')->and_where('created', '>', time() - 86400)->findAll(2);

//上面的代碼會在Model內部生成一個結構化的字符串,該字符串及對應的值將被放入緩存中
{table_name}-{key}-{md5(sql)}
//相似這樣
article-2-c81e728d9d4c2f636f067f89cc14862c
//若是沒有傳參數,{key}就不會被替代
article-{key}-c81e728d9d4c2f636f067f89cc14862c

//首次執行此代碼時,ORM內部會先去緩存中找上面的結構化字符串,沒有找到,就會執行SQL語句,而後把返回的結果的id放到緩存中
//這就是要放到緩存中的數據,下次若是再執行此SQL,直接從緩存中獲取id(1,43,50),而後再從緩存中獲取這些id對應的行內容
//注意到這裏有個revision,這是未來要判斷該緩存是否已過時的關鍵。
'article-2-c81e728d9d4c2f636f067f89cc14862c' => array(
	'revision' => 1294476790,
	'data' => [1, 43, 50],
);

//同時還會生成另外一組數據,就是revision
'article-2-revision' => 1294476777,

//若是做者又更新了一篇博客,則上面的查詢語句結果就發生了變化。
ORM::factory('article')->values(array(...))->save(2);

//ORM會找到緩存中的一組revision數據,同時更新它
'article-2-revision' => 1294476888,

//若是沒有提供key,那就是
'article-{key}-revision' => 1294476888,

//下次再執行上面的ORM查詢代碼時,會先去查找'article-2-revision'的版本,而後跟'article-2-c81e728d9d4c2f636f067f89cc14862c'的版本號比較,若是前一個版本號>後一個版本號,表示數據有改變,緩存已過時,這時就須要從新執行SQL語句,並更新'article-2-c81e728d9d4c2f636f067f89cc14862c'這個字符串的版本號。若是比較結果是前一個版本號<=後一個版本號,那就直接從緩存中讀取。
相關文章
相關標籤/搜索