函數所在文件:framework/function/cache.mysql.func.phpphp
目前微擎的我的真實調用:mysql
$setting = $this->module['config'];web
$aaaaa = $setting['copyright'];sql
在微擎微信公衆號系統裏面能夠分爲三類緩存:保存到數據庫表core_cache中的數據庫緩存、保存到文件的文件緩存和memcahe緩存,本教程介紹的是數據庫緩存,也是微擎系統配置的默認緩存。
數據庫
由於,處理數據庫緩存的函數相對簡單,因此,phpos微信網把這幾個函數一塊兒製做成一個教程。由於是對數據庫表操做,因此,再怎麼操做表,無非就是對錶記錄進行插入(增)、刪除、修改和查詢,因此,對應着數據庫緩存函數也有插入緩存數據、刪除緩存數據、修改緩存數據和查詢緩存數據操做。bootstrap
在微擎微信公衆號系統裏面緩存數據都保存到了緩存表core_cache裏面,也就是說下面的函數都是對這個表這進行的增、刪、改和查的操做。數組
表core_cache:緩存
1、插入(寫入)緩存數據微信
cache_write($key, $data)函數:這個在本站已經有詳細的講解了,這裏再也不多解釋。微信開發
示例
load()->func('cache.mysql');
cache_write('phpos',array('webname'=>'微信開發','url'=>'phpos.net','title'=>array('微信開發','微信公衆號')));
結果:
2、刪除緩存數據
刪除函數:cache_delete($key)
此函數的做用是:刪除core_cache表中的某一條記錄。
$key 爲要刪除的表中字段key的值,例如,刪除phpos記錄,則$key='phpos'。
這個函數使用的sql語句是:
DELETE FROM ' . tablename('core_cache') . ' WHERE `key`=:key
這個參數$key正是要刪除的條件,因此,只要您傳一個值$key就能夠把表中key字段對應的記錄刪除掉。
在這個函數裏面使用了微擎微信公衆號系統封裝的數據庫查詢函數pdo_query($sql, $params),這個函數相似面向過程裏面的mysql_query()執行一條sql語句。
示例
刪除字段phpos對應的記錄:
load()->func('cache.mysql');
cache_delete('phpos');
3、刪除整個緩存表裏面的記錄,或是刪除包含相同名稱的記錄。
刪除函數:cache_clean($prefix = '')
上面的函數是刪除肯定的某一條記錄,而本函數刪除的是整個表或是包含相似phpos:、web:、site:等字段的值的記錄。
1)若是$prefix爲空,則刪除事個core_cache表中的數據。
而且,刪除保存在全局變量$_W中的數據:
if ($result) {
unset($_W['cache']);
}
其中,$_W['cache']是在文件bootstrap.inc.php裏面定義的:
if(!in_array($_W['config']['setting']['cache'], array('mysql', 'file', 'memcache'))) {
$_W['config']['setting']['cache'] = 'mysql';
}
這個條件裏面的$_W['config']['setting']['cache']是在配置文件data/config.php配置的,默認是mysql,表示使用緩存數據使用「數據庫緩存」。
2)若是$prefix不空,則刪除與{$prefix}:%匹配的數據。
示例:
load()->func('cache.mysql');
cache_clean('website');
或
cache_clean();
4、查詢緩存數據
1)讀取緩存數據函數:
cache_read($key)
讀取表中某一條緩存數據的值:
SELECT `value` FROM ' . tablename('core_cache') . ' WHERE `key`=:key'
從這個sql語句就能夠看出這個函數查詢的是表core_cache中的鍵爲$key對應的值,而且,使用函數iunserializer($val)把查詢出來的序列化的字符串轉換成反序列化成字符串。
示例
load()->func('cache.mysql');
print_r(cache_read('website'));
結果:Array ( [url] => www.phpos.net [title] => 微信網 )
2)查詢全部符合條件的緩存數據函數:
cache_search($prefix)
查詢sql語句:
$sql = 'SELECT * FROM ' . tablename('core_cache') . ' WHERE `key` LIKE :key';
$params = array();
$params[':key'] = "{$prefix}%";
$rs = pdo_fetchall($sql, $params);
從上面這段代碼就能夠看出這個函數是查詢字段key的值包含{$prefix}的全部記錄,這裏使用了函數pdo_fetchall()查詢出全部符合條件的記錄。
最後,返回的是$result,也是一個數組。
示例
load()->func('cache.mysql');
print_r(cache_search('website'));
結果:Array ( [website] => Array ( [url] => www.phpos.net [title] => 微信網 ) )
5、更新緩存數據
在這個文件cache.mysql.func.php裏面,咱們並無發現更新緩存數據,難道不能更新嗎?其實,寫數據函數cache_write()裏面在調用函數pdo_insert('core_cache', $record, true)時,使用了插入數據函數的第三個參數true,若是使用這個參數,使用replace into語句插入數據,這條sql語句,會判斷一下表中是否存在某一數據,若是存在則刪除之,而後,再把要插入表的數據插入到表中。
因此,其實,這個寫入數據函數自己就有更新數據的功能,因此,在這個文件裏面並無單獨定義「更新」緩存數據。