<?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'這個字符串的版本號。若是比較結果是前一個版本號<=後一個版本號,那就直接從緩存中讀取。