如果后台应用接收到浏览器端的查询请求后,每次都与数据库连接读取数据,势必增加数据库的负担。而往往有大量的请求是重复的,我们可以把这些重复的信息采用缓存技术保存下来,重复使用,这样,在某些情况下可以大大提高程序的性能。

1,缓存函数

cache_write函数接受$string参数,写到$file文件中。注意var_export函数,作用是:

此函数返回关于传递给该函数的变量的结构信息,它和 var_dump() 类似,不同的是其返回的表示是合法的 PHP 代码。您可以通过将函数的第二个参数设置为 TRUE,从而返回变量的表示。

这些参数可以是数组或常量,而这些数组或常量通常为从数据库中取出的记录,或非序列化(unserialize)对象后得到的数据。这些都可以缓存到本地的文本文件中。

cache_write函数很简单,需要读取数据时,先判断缓存是否存在,存在的话就不去连接数据库取数据,而是直接读出缓存的文本文件,直接产生了数组或常量等类型的数据,可以直接使用。

//文件名func.inc.php

define("CACHEDIR", "./");  //定义缓存文件夹

function cache_write($file, $string, $type = 'array')

{

if(is_array($string))

{

$type = strtolower($type);

if($type == 'array')

{

$string = "<?php /n return ".var_export($string,TRUE).";/n?>";

}

elseif($type == 'constant')

{

$data='';

foreach($string as $key => $value)

$data .= "define('".strtoupper($key)."','".addslashes($value)."');/n";

$string = "<?php /n".$data."/n?>";

}

}

$strlen = file_put_contents(CACHEDIR.$file, $string);

chmod(CACHEDIR.$file, 0777);

return $strlen;

}

function cache_read($file)

{

$cachefile = CACHEDIR.$file;

if(!file_exists($cachefile))

return array();

return include $cachefile;

}

function cache_delete($file)

{

return @unlink(CACHEDIR.$file);

}

if(!function_exists('file_put_contents'))

{

define('FILE_APPEND', 8);

function file_put_contents($file, $string, $append = '')

{

$mode = $append == '' ? 'wb' : 'ab';

$fp = @fopen($file, $mode) or exit("Can not open file $file !");

flock($fp, LOCK_EX);

$stringlen = @fwrite($fp, $string);

flock($fp, LOCK_UN);

@fclose($fp);

return $stringlen;

}

}

?>

2,写缓存和读取的示例

//写缓存

include "func.inc.php";

$arr = array (1, 2, array ("a", "b", "c"));

cache_write('test.cache.php', $arr);  //缓存文件 test.cache.php

?>

//读缓存

include "func.inc.php";

$var = cache_read('test.cache.php');

print_r($new_var);

print_r($var);

foreach ($var as $k=>$v)

{

echo '
' . $k . '=' . $v ;

}

?>

3,性能分析

缓存之所以能提高性能,是通过本地磁盘空间换网络存取速度和数据库服务器存取时间的结果。

a = 本机读写时间

b = 本机占用空间

c = 网络传输时间

d = 数据库服务器磁盘时间

可以估算到,如果数据库与应用程序存在于一台机器时,主要是 a 与 d 的比较,效果可能并不明显,甚至还要糟一点。因为数据库系统针对磁盘存取经过了精心优化,是操作系统对文件的普通读写无法相比的。

如果本机的磁盘存取效率不佳,有时从局域网的数据库上取得数据,可能比从本机的缓存取数据还快,这种情况比较少见。而随着请求数量的大量增加,缓存的效果就会明显起来。

张庆(网眼)

“网眼视界”更多文章:http://blog.why100000.com    2008年9月7日

php数据库缓存实现原理,PHP那些事:数据库缓存原理相关推荐

  1. 深入浅出计算机组成原理学习笔记:局部性原理-数据库性能跟不上,加个缓存就好了(第36讲)...

    平时进行服务端软件开发的时候,我们通常会把数据存储在数据库里.而服务端系统遇到的第一个性能瓶颈,往往就发生在访问数据库的时候. 这个时候,大部分工程师和架构师会拿出一种叫作"缓存" ...

  2. php缓存mysql表_PHP 中的数据库缓存原理

    本文章作者主要是用到 php 里面的数据库缓存,php缓存,cache_write,var_export功能对数据进行缓存操作了,觉得写得很不错. 如果后台应用接收到浏览器端的查询请求后,每次都与数据 ...

  3. mysql数据库算法_数据库:MySQL索引背后的数据结构及算法原理【转】

    原文:http://blog.codinglabs.org/articles/theory-of-mysql-index.html 摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话 ...

  4. 聊一聊安全且正确使用缓存的那些事 —— 关于缓存可靠性、关乎数据一致性

    大家好,又见面了. 本文是笔者作为掘金技术社区签约作者的身份输出的缓存专栏系列内容,将会通过系列专题,讲清楚缓存的方方面面.如果感兴趣,欢迎关注以获取后续更新. 在上一篇文档<聊一聊作为高并发系 ...

  5. 《深入理解mybatis原理》 MyBatis的一级缓存实现详解 及使用注意事项

    MyBatis是一个简单,小巧但功能非常强大的ORM开源框架,它的功能强大也体现在它的缓存机制上.MyBatis提供了一级缓存.二级缓存 这两个缓存机制,能够很好地处理和维护缓存,以提高系统的性能.本 ...

  6. Mybatis的一、二级缓存的原理与使用、禁止指定方法的二级缓存与刷新缓存、Mybatis整合Ehcache、二级缓存的使用场景与局限性-day03

    目录 第一节 Mybatis的缓存 1.1 Mybatis的缓存理解 1.2 一级缓存 原理 使用与测试 1.3 二级缓存 原理 使用与测试 禁用指定方法的二级缓存 刷新缓存 总结 1.4 整合ehc ...

  7. Docker中搭建redis分片集群,搭建redis哨兵结构,实现springboot中对redis分片集群、哨兵结构的访问,Redis缓存雪崩、缓存击穿处理(非关系型数据库技术课程 第十二周)

    文章目录 一.要求: 二.知识总结 缓存雪崩 解决方案 docker中redis分片集群搭建 配置好配置文件 redis-6380.conf redis-6381.conf redis-6382.co ...

  8. 大数据技术原理与应用3NoSQL数据库、云数据库

    第5讲 NoSQL数据库 5.1 NoSQL概述 通常,NoSQL数据库具有以下几个特点: (1)灵活的可扩展性 (2)灵活的数据模型 (3)与云计算紧密融合 可以支持在多个节点上扩展. 关系设计库中 ...

  9. 分布式专题-分布式缓存技术之MongoDB01-应用场景及实现原理

    目录导航 前言 什么是 NoSQL 关系型数据库 PK 非关系型数据库 NoSQL 数据库分类 MongoDB的数据结构与关系型数据库数据结构对比 MongoDB中的数据类型 图解MongoDB底层原 ...

最新文章

  1. 实用目标检测器 | 性能超YoloV5,推理耗时不变(附github源码)
  2. msoffice二级各题题型及其分值
  3. 2020-11-17(补码的非)
  4. 巅峰极客2021 what_pickle——一道综合性的python web
  5. 机器学习导论(张志华):多元高斯分布
  6. 洛谷 P3375 【模板】KMP字符串匹配
  7. oracle建表多个主键怎么办,Oracle建表、索引、主键
  8. swoole学习之: MQTT (物联网) 服务器
  9. 关于app的几个核心功能的设计想法
  10. 根据手机的分辨率和屏幕尺寸计算手机屏幕的PPI
  11. kneighbors()返回值indices、distances详解
  12. 主机如何做好防勒索病毒措施
  13. Java编程:随机生成数字串
  14. Vue:如何制作表格数据分页查询
  15. InnoDB存储引擎简介
  16. html表格table的表头排序,js代码fastunit使用案例
  17. 湖北武汉劳务员报考劳务员的工程劳务管理建筑七大员报考
  18. python平均成绩计算异常处理_【Python 20】BMR计算器4.0(异常处理)
  19. SQL Server 权限管理
  20. skywalking介绍

热门文章

  1. 解析鸿蒙内核消息队列QueueMail接口的哼哈二将
  2. AI论文解读丨融合视觉、语义、关系多模态信息的文档版面分析架构VSR
  3. 华为云薛浩:媒体业务进入全面云化时代,云原生成为必然选择
  4. Python进阶丨如何创建你的第一个Python元类?
  5. 云图说 | 通过Helm模板快速部署中间件应用
  6. Spark生态圈及安装
  7. 索尼首款 AI 图像传感器,让相机处处更智能
  8. Stateflow_duration计时
  9. java基本语法 2017_Java基本语法——(用于日后复习)
  10. django url 生效_Django-url配置和详解