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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

函数所在文件: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表中的某一条记录。


  keykeyphposkey='phpos'。


  这个函数使用的sql语句是:

DELETE FROM ' . tablename('core_cache') . ' WHERE `key`=:key


  这个参数keykey就可以把表中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=pdofetchall(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
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
0
0
0
344
分享
相关文章
解决缓存与数据库的数据一致性问题的终极指南
解决缓存与数据库的数据一致性问题的终极指南
307 63
WordPress数据库查询缓存插件
这款插件通过将MySQL查询结果缓存至文件、Redis或Memcached,加速页面加载。它专为未登录用户优化,支持跨页面缓存,不影响其他功能,且可与其他缓存插件兼容。相比传统页面缓存,它仅缓存数据库查询结果,保留动态功能如阅读量更新。提供三种缓存方式选择,有效提升网站性能。
34 1
缓存与数据库的一致性方案,Redis与Mysql一致性方案,大厂P8的终极方案(图解+秒懂+史上最全)
缓存与数据库的一致性方案,Redis与Mysql一致性方案,大厂P8的终极方案(图解+秒懂+史上最全)
项目实战:一步步实现高效缓存与数据库的数据一致性方案
Hello,大家好!我是热爱分享技术的小米。今天探讨在个人项目中如何保证数据一致性,尤其是在缓存与数据库同步时面临的挑战。文中介绍了常见的CacheAside模式,以及结合消息队列和请求串行化的方法,确保数据一致性。通过不同方案的分析,希望能给大家带来启发。如果你对这些技术感兴趣,欢迎关注我的微信公众号“软件求生”,获取更多技术干货!
378 6
项目实战:一步步实现高效缓存与数据库的数据一致性方案
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
根据对一致性的要求程度,提出多种解决方案:同步删除、同步删除+可靠消息、延时双删、异步监听+可靠消息、多重保障方案
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
云端问道21期方案教学-应对高并发,利用云数据库 Tair(兼容 Redis®*)缓存实现极速响应
云端问道21期方案教学-应对高并发,利用云数据库 Tair(兼容 Redis®*)缓存实现极速响应
云端问道21期实操教学-应对高并发,利用云数据库 Tair(兼容 Redis®)缓存实现极速响应
本文介绍了如何通过云端问道21期实操教学,利用云数据库 Tair(兼容 Redis®)缓存实现高并发场景下的极速响应。主要内容分为四部分:方案概览、部署准备、一键部署和完成及清理。方案概览中,展示了如何使用 Redis 提升业务性能,降低响应时间;部署准备介绍了账号注册与充值步骤;一键部署详细讲解了创建 ECS、RDS 和 Redis 实例的过程;最后,通过对比测试验证了 Redis 缓存的有效性,并指导用户清理资源以避免额外费用。
云数据库Tair:从稳定低延时缓存到 Serverless KV
本次分享聚焦云数据库Tair的使用,涵盖三部分内容:1) Tair概览,介绍其作为稳定低延时缓存及KV数据库服务的特点和优势;2) 稳定低延迟缓存技术,探讨如何通过多线程处理、优化内核等手段提升性能与稳定性;3) 从缓存到Serverless KV的演进,特别是在AI大模型时代,Tair如何助力在线服务和推理缓存加速。Tair在兼容性、性能优化、扩缩容及AI推理加速方面表现出色,满足不同场景需求。
InfluxDB vs TDengine :2025 年了,谁家用的数据库还不能高效读缓存?
在工业互联网和物联网的大数据应用场景中,实时数据的写入和查询性能至关重要。如何快速获取最新设备状态并实时处理数据,直接影响到业务的高效运转。本文将深入分析 TDengine 和 InfluxDB 在缓存机制上的差异,帮助读者更好地理解这两款主流时序数据库在性能优化方面的优劣。
354 1