PHP企业级应用之常见缓存技术篇二
转自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企业级应用之常见缓存技术篇二相关推荐
- PHP企业级应用之常见缓存技术篇
别每天OO,这个配置怎么改,这段代码哪错了,没劲,好的程序不光是代码写的好,整体架构很重要,多了解程序之外的东西,这篇不再单单是程序方面的东西了,会写到从程序到服务器的设置,会比较多,但个人的经验有限 ...
- 那些年我们一起追过的缓存写法(二)
感谢园子里的同学对上一篇的支持,很高兴楼主的一些经验及想法能够对大家有一些帮助. 上次主要讨论缓存读写这块各种代码实现,本篇就上次的问题继续来,看看那些年折腾过的各种缓存做法. 阅读目录: 缓存预热 ...
- 前端人员必须掌握哪些技术?常见缓存种类有什么?
前端人员必须掌握哪些技术?常见缓存种类有什么?缓存可以让原本打开很慢的页面,变得能"秒开".在我们平时访问的APP.网站几乎都有涉及到缓存的运用,因此缓存也成为每一个前端人员必须要 ...
- 科研写作——常见句式(二)
常见句式(二) 背景 强调不足 之前研究的负面结果 之前研究证据不足或矛盾 研究领域的知识缺口 引出当前研究 当前研究的目的 要解决的问题和假设 本研究的设计和方法 本研究的意义 对本研究感兴趣的原因 ...
- Java常见应用——Json,二维码生成,加密解密应用
Java常见应用--Json,二维码生成,加密解密应用 一.JSON 1.下载json架包,json官网:json.org 2.将Map/JavaBean/String转化成json对象,只需要使用J ...
- Baumer工业相机堡盟工业相机软件CameraExplorer常见功能使用说明二
Baumer工业相机堡盟工业相机软件CameraExplorer常见功能使用说明二 Baumer工业相机 Baumer工业相机CE软件图像/视频存储功能 Baumer工业相机CE软件记录日志文件功能 ...
- 企业级高性能MYSQL的用法---------(二)----------半同步复制 和 全同步复制(组复制)
企业级高性能MYSQL的用法---------(二)----------半同步复制 和 全同步复制(组复制) 1.基于GDIT的半同步复制 为什么要实现mysqI的复制 1.实现服务器负载均衡 2.通 ...
- 认识常见中间件-redis(二)-redis缓存雪崩、缓存击穿、缓存穿透
缓存雪崩 缓存雪崩指的是大量的请求无法在 Redis 缓存系统中处理,请求全部打到数据库,导致数据库压力激增,甚至宕机.出现该错误的原因主要有两种: 大量热点数据同时过期,导致大量请求需要查询数据 ...
- mysql 多线程 一致性_常见缓存数据库一致性方案(建议收藏)
项目中常常会用到redis 作为缓存抵挡大量流量直接冲击数据库mysql,那么必然涉及缓存和数据库数据的一致性(尽量短时间内最终一致性)问题. 导致不一致的原因主要有三种情况: 1:并发下,读取旧数据 ...
最新文章
- SpringBoot+ElementUI实现多选设置一月中指定几天的属性,SpringBoot中通过反射实现
- group_concat 不是可以识别的 内置函数名称。_Python 函数库 APIs 编写指南
- 游戏编程里面有哪些经典或者很酷的算法?
- golang mysql封装_自己封装的golang 操作数据库方法
- asp.net mvc post 后台model_搭建restful api后台
- 可复用的基于ARM的W5100底层驱动设计
- python linkedlist,LinkedList在python中的实现
- 在Win7系统中如何安装PDF虚拟打印机
- 小米 samba linux,解决小米路由器升级固件后samba无法访问一例
- acrobat PDF删除部分_pdf转word怎么转教程
- SpringBoot掌握的差不多了,就剩下一个Actuator没搞定了,本文详细来介绍!!!
- 大学生信息安全(学习笔记一)
- 计算机桌面用什么实木板好,几百块打造属于你的专属实木(硬木)电脑桌
- winserver 443端口被system占用_手机系统占用内存越来越大,是谁的锅?
- STM32开发实战:W25Q32JV SPI Flash详解
- 决策树和K近邻分类随堂笔记(一)
- 18周过后~(学期总结)
- 机器学习算法 - 频繁项集和关联规则思想
- 通过装疯卖傻 委曲求全
- 为什么可见光是“可见”光?
热门文章
- Linux tar压缩命令:打包与解打包命令
- linux制作win10安装u盘,win10u盘安装系统怎样全新安装
- 英语学习:X Y Z开头
- 模拟电路 电学英语单词大赏
- android 启动linux命令行模式,Android用命令行启动应用
- Android Studio App开发之通知渠道NotificationChannel及给华为、小米手机桌面应用添加消息数量角标实战(包括消息重要级别的设置 附源码)
- 内部存储空间不足_如何清理苹果手机内部存储空间不足
- 自定义控件其实很简单1/3
- java puppeteer生成pdf_puppeteer库入门初探
- Puppeteer介绍