微擎數據庫緩存的增、刪、改和查函數詳解

函數所在文件: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.png


1、插入(寫入)緩存數據微信


cache_write($key, $data)函數:這個在本站已經有詳細的講解了,這裏再也不多解釋。微信開發


示例


load()->func('cache.mysql');

cache_write('phpos',array('webname'=>'微信開發','url'=>'phpos.net','title'=>array('微信開發','微信公衆號')));


結果:


2.png


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語句,會判斷一下表中是否存在某一數據,若是存在則刪除之,而後,再把要插入表的數據插入到表中。


因此,其實,這個寫入數據函數自己就有更新數據的功能,因此,在這個文件裏面並無單獨定義「更新」緩存數據。

相關文章
相關標籤/搜索