转自http://kennyluo.iteye.com/blog/1405079

别每天OO,这个配置怎么改,这段代码哪错了,没劲,好的程序不光是代码写的好,整体架构很重要,多了解程序之外的东西,这篇不再单单是程序方面的东西了,会写到从程序到服务器的设置,会比较多,但个人的经验有限,知道的就这么多,不知道的我也没法写呀, 文章说的不好大家就当我说梦话得了。
所有程序例子都来自网络

普遍缓存技术

数据缓存:这里所说的数据缓存是指数据库查询缓存,每次访问页面的时候,都会先检测相应的缓存数据是否存在,如果不存在,就连接数据库,得到数据,并把查询结果序列化后保存到文件中,以后同样的查询结果就直接从缓存表或文件中获得。

用的最广的例子看Discuz的搜索功能,把结果ID缓存到一个表中,下次搜索相同关键字时先搜索缓存表。

举个常用的方法,多表关联的时候,把附表中的内容生成数组保存到主表的一个字段中,需要的时候数组分解一下,这样的好处是只读一个表,坏处就是两个数据同步会多不少步骤,数据库永远是瓶颈,用硬盘换速度,是这个的关键点。

页面缓存

每次访问页面的时候,都会先检测相应的缓存页面文件是否存在,如果不存在,就连接数据库,得到数据,显示页面并同时生成缓存页面文件,这样下次访问的时候页面文件就发挥作用了。(模板引擎和网上常见的一些缓存类通常有此功能)

时间触发缓存

检查文件是否存在并且时间戳小于设置的过期时间,如果文件修改的时间戳比当前时间戳减去过期时间戳大,那么就用缓存,否则更新缓存。

内容触发缓存

当插入数据或更新数据时,强制更新缓存。

静态缓存:

这里所说的静态缓存是指静态化,直接生成HTML或XML等文本文件,有更新的时候重生成一次,适合于不太变化的页面,这就不说了。

以上内容是代码级的解决方案,我直接CP别的框架,也懒得改,内容都差不多,很容易就做到,而且会几种方式一起用,但下面的内容是服务器端的缓存方案,非代码级的,要有多方的合作才能做到

内存缓存:

Memcached是高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。

这里说下Memcached的例子:

<?php
$memcache = new Memcache;
$memcache->connect('localhost', 11211) or die ("Could not connect");
$version = $memcache->getVersion();
echo "Server's version: ".$version."\n";
$tmp_object = new stdClass;
$tmp_object->str_attr = 'test';
$tmp_object->int_attr = 123;
$memcache->set('key', $tmp_object, false, 10) or die ("Failed to save data at the server");
echo "Store data in the cache (data will expire in 10 seconds)\n";
$get_result = $memcache->get('key');
echo "Data from the cache:\n";
var_dump($get_result);
?>

读库的例子:

<?php
$sql = 'SELECT * FROM users';
$key = md5($sql);   //memcached 对象标识符
if ( !($datas = $mc->get($key)) ) {
    //  在 memcached 中未获取到缓存数据,则使用数据库查询获取记录集。
    echo "n".str_pad('Read datas from MySQL.', 60, '_')."n";
    $conn = mysql_connect('localhost', 'test', 'test');
    mysql_select_db('test');
    $result = mysql_query($sql);
    while ($row = mysql_fetch_object($result))
        $datas[] = $row;
    //  将数据库中获取到的结果集数据保存到 memcached 中,以供下次访问时使用。
    $mc->add($key, $datas);
} else {
    echo "n".str_pad('Read datas from memcached.', 60, '_')."n";
}
var_dump($datas);
?>

转载于:https://www.cnblogs.com/souris/archive/2012/02/17/2356571.html

PHP企业级应用之常见缓存技术篇二相关推荐

  1. PHP企业级应用之常见缓存技术篇

    别每天OO,这个配置怎么改,这段代码哪错了,没劲,好的程序不光是代码写的好,整体架构很重要,多了解程序之外的东西,这篇不再单单是程序方面的东西了,会写到从程序到服务器的设置,会比较多,但个人的经验有限 ...

  2. 那些年我们一起追过的缓存写法(二)

    感谢园子里的同学对上一篇的支持,很高兴楼主的一些经验及想法能够对大家有一些帮助. 上次主要讨论缓存读写这块各种代码实现,本篇就上次的问题继续来,看看那些年折腾过的各种缓存做法. 阅读目录: 缓存预热 ...

  3. 前端人员必须掌握哪些技术?常见缓存种类有什么?

    前端人员必须掌握哪些技术?常见缓存种类有什么?缓存可以让原本打开很慢的页面,变得能"秒开".在我们平时访问的APP.网站几乎都有涉及到缓存的运用,因此缓存也成为每一个前端人员必须要 ...

  4. 科研写作——常见句式(二)

    常见句式(二) 背景 强调不足 之前研究的负面结果 之前研究证据不足或矛盾 研究领域的知识缺口 引出当前研究 当前研究的目的 要解决的问题和假设 本研究的设计和方法 本研究的意义 对本研究感兴趣的原因 ...

  5. Java常见应用——Json,二维码生成,加密解密应用

    Java常见应用--Json,二维码生成,加密解密应用 一.JSON 1.下载json架包,json官网:json.org 2.将Map/JavaBean/String转化成json对象,只需要使用J ...

  6. Baumer工业相机堡盟工业相机软件CameraExplorer常见功能使用说明二

    Baumer工业相机堡盟工业相机软件CameraExplorer常见功能使用说明二 Baumer工业相机 Baumer工业相机CE软件图像/视频存储功能 Baumer工业相机CE软件记录日志文件功能 ...

  7. 企业级高性能MYSQL的用法---------(二)----------半同步复制 和 全同步复制(组复制)

    企业级高性能MYSQL的用法---------(二)----------半同步复制 和 全同步复制(组复制) 1.基于GDIT的半同步复制 为什么要实现mysqI的复制 1.实现服务器负载均衡 2.通 ...

  8. 认识常见中间件-redis(二)-redis缓存雪崩、缓存击穿、缓存穿透

    缓存雪崩   缓存雪崩指的是大量的请求无法在 Redis 缓存系统中处理,请求全部打到数据库,导致数据库压力激增,甚至宕机.出现该错误的原因主要有两种: 大量热点数据同时过期,导致大量请求需要查询数据 ...

  9. mysql 多线程 一致性_常见缓存数据库一致性方案(建议收藏)

    项目中常常会用到redis 作为缓存抵挡大量流量直接冲击数据库mysql,那么必然涉及缓存和数据库数据的一致性(尽量短时间内最终一致性)问题. 导致不一致的原因主要有三种情况: 1:并发下,读取旧数据 ...

最新文章

  1. SpringBoot+ElementUI实现多选设置一月中指定几天的属性,SpringBoot中通过反射实现
  2. group_concat 不是可以识别的 内置函数名称。_Python 函数库 APIs 编写指南
  3. 游戏编程里面有哪些经典或者很酷的算法?
  4. golang mysql封装_自己封装的golang 操作数据库方法
  5. asp.net mvc post 后台model_搭建restful api后台
  6. 可复用的基于ARM的W5100底层驱动设计
  7. python linkedlist,LinkedList在python中的实现
  8. 在Win7系统中如何安装PDF虚拟打印机
  9. 小米 samba linux,解决小米路由器升级固件后samba无法访问一例
  10. acrobat PDF删除部分_pdf转word怎么转教程
  11. SpringBoot掌握的差不多了,就剩下一个Actuator没搞定了,本文详细来介绍!!!
  12. 大学生信息安全(学习笔记一)
  13. 计算机桌面用什么实木板好,几百块打造属于你的专属实木(硬木)电脑桌
  14. winserver 443端口被system占用_手机系统占用内存越来越大,是谁的锅?
  15. STM32开发实战:W25Q32JV SPI Flash详解
  16. 决策树和K近邻分类随堂笔记(一)
  17. 18周过后~(学期总结)
  18. 机器学习算法 - 频繁项集和关联规则思想
  19. 通过装疯卖傻 委曲求全
  20. 为什么可见光是“可见”光?

热门文章

  1. Linux tar压缩命令:打包与解打包命令
  2. linux制作win10安装u盘,win10u盘安装系统怎样全新安装
  3. 英语学习:X Y Z开头
  4. 模拟电路 电学英语单词大赏
  5. android 启动linux命令行模式,Android用命令行启动应用
  6. Android Studio App开发之通知渠道NotificationChannel及给华为、小米手机桌面应用添加消息数量角标实战(包括消息重要级别的设置 附源码)
  7. 内部存储空间不足_如何清理苹果手机内部存储空间不足
  8. 自定义控件其实很简单1/3
  9. java puppeteer生成pdf_puppeteer库入门初探
  10. Puppeteer介绍