开发者社区> 科技小能手> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

微擎数据库缓存的增、删、改和查函数详解

简介:
+关注继续查看

函数所在文件:framework/function/cache.mysql.func.php


目前微擎的个人真实调用:

$setting = $this->module['config'];

$aaaaa = $setting['copyright'];


在微擎微信公众号系统里面可以分为三类缓存:保存到数据库表core_cache中的数据库缓存、保存到文件的文件缓存和memcahe缓存,本教程介绍的是数据库缓存,也是微擎系统配置的默认缓存。


因为,处理数据库缓存的函数相对简单,所以,phpos微信网把这几个函数一起制作成一个教程。因为是对数据库表操作,所以,再怎么操作表,无非就是对表记录进行插入(增)、删除、修改和查询,所以,对应着数据库缓存函数也有插入缓存数据、删除缓存数据、修改缓存数据和查询缓存数据操作。


在微擎微信公众号系统里面缓存数据都保存到了缓存表core_cache里面,也就是说下面的函数都是对这个表这进行的增、删、改和查的操作。


表core_cache:

1.png


一、插入(写入)缓存数据


cache_write($key, $data)函数:这个在本站已经有详细的讲解了,这里不再多解释。


示例


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

cache_write('phpos',array('webname'=>'微信开发','url'=>'phpos.net','title'=>array('微信开发','微信公众号')));


结果:


2.png


二、删除缓存数据


  删除函数: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');


三、删除整个缓存表里面的记录,或是删除包含相同名称的记录。


  删除函数: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();


四、查询缓存数据


  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] => 微信网 ) )

五、更新缓存数据

  在这个文件cache.mysql.func.php里面,我们并没有发现更新缓存数据,难道不能更新吗?其实,写数据函数cache_write()里面在调用函数pdo_insert('core_cache', $record, true)时,使用了插入数据函数的第三个参数true,如果使用这个参数,使用replace into语句插入数据,这条sql语句,会判断一下表中是否存在某一数据,如果存在则删除之,然后,再把要插入表的数据插入到表中。


所以,其实,这个写入数据函数本身就有更新数据的功能,所以,在这个文件里面并没有单独定义“更新”缓存数据。



本文转自 gutaotao1989 51CTO博客,原文链接:http://blog.51cto.com/taoyouth/2059171

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
数据库——GUI方式创建数据库
数据库——GUI方式创建数据库
27 0
海胜专访--MaxCompute 与大数据查询引擎的技术和故事
在2019大数据技术公开课第一季《技术人生专访》中,阿里巴巴云计算平台高级技术专家苑海胜为大家分享了《MaxCompute 与大数据查询引擎的技术和故事》,主要介绍了MaxCompute与MPP Database的异同点,分布式系统上Join的实现,且详细讲解了MaxCompute针对Join和聚合引入的Hash Clustering Table和Range Clustering Table的优化。
2248 0
链家大数据多维分析引擎实践
大数据背景下,传统关系型多维分析 ROLAP 引擎遇到极大挑战,因而链家转向基于 Hadoop 生态的 MOLAP(Kylin)及 HOLAP (多引擎)。在架构师实践日北京站中,链家大数据集群架构组负责人邓钫元进行演讲,分享了链家在多维分析引擎方面的一些实践经验,主要从 OLAP 的背景和简介、链家多维分析架构演进和展望、OLAP 平台链路优化这三部分来介绍。
5643 0
缓存数据库
memcache ehcache
430 0
23704
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载