函数所在文件: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语句,会判断一下表中是否存在某一数据,若是存在则删除之,而后,再把要插入表的数据插入到表中。
因此,其实,这个写入数据函数自己就有更新数据的功能,因此,在这个文件里面并无单独定义“更新”缓存数据。