Mencache

1、什么是Memcache

分布式高速缓存系统,存储在内存中

2、什么时候使用Memcache

在应用和数据库当中添加一个缓冲层,当第一次读取数据后,把数据存储在Memcache中,当第二次或者之后读取数据时,就从Memcache中读取,从而减轻Mysql数据库等服务器的压力。

Memcache使用场景:

  1. 非持久化存储:对数据存储要求不高
  2. 分布式存储:不适合单机使用
  3. key/value存储:格式简单,不支持List、Array数据格式

Memcache服务端和客户端的安装,自行google 百度。

PHP中使用Memcache

系统类:addServer,addServers,getStats,getVersion

数据类:add,set,delete,flush,replace,increment,get

进阶类:setMulti,deleteMulti,getMulti,getResultCode,getResultMessage

$m = new Memcached();
$m->addServer(‘127.0.0.1’,11211);
$m->add(‘mkey’,’mvalue’,600); // 参数1:键 参数2:键对应的值 参数3:保存时间(秒)
$m->set(‘mkey1’, ‘mvalue1’, 600); // 当对应键没有值存在时,新增一条,当存在时,覆盖掉原来的值

// increment 对缓存值进行自增
$m->set(‘num’, 5, 0);
$m->increment(‘num’, 2); // 对num所对应对值自增2
// decrement 对缓存值进行自减
$m->decrement(‘num’, 3); // 对num所对应的值自减3

// 删除数据
$m->delete(‘mkey’); // 删除对应键值对
$m->flush(); // 清空memcache所有缓存值,慎用

echo $m->get(‘mkey’); // 获取键所对应的值

// 一次设置多个值、一次获取多个值、一次删除多条数据
$array = array(
‘key’ => ‘value’,
‘key2’ => ‘value2’,
);
$m->setMulti($array, 0); // 参数1:键值对数组 参数2:保存时间
$res = $m->getMulti(array(‘key’, ‘key2’)); // 参数:键数组
print_r($res);
$m->deleteMulti(array(‘key’, ‘key2’)); // 参数:键数组

echo $m->getResultCode(); // 获取上一次操作返回的编码
echo $m->getResultMessage(); // 获取上一次操作返回的信息

封装自己的Memcache类

扩展性

可调试

尽量简便的操作,一个方法多种功能

 

项目中使用Memcache

1.即时生成缓存

2.提前生成缓存

3.永久缓存

算法效率的度量方法

一、事后统计法

事后统计法:这种方法主要是通过设计好的测试程序和数据,利用计算机计时器对不同算法编制的程序的运行时间进行比较,从而确定算法效率的高低。

缺点:

必须依据算法事先编制好程序,这通常需要花费大量时间和精力。

时间的比较依赖计算机硬件和软件等环境因素,有时会掩盖算法本身的优劣。

算法的测试数据设计困难,并且程序的运行时间往往还与测试数据的规模有很大关系,效率高的算法在小的测试数据面前往往得不到体现。

二、事前分析估算方法

事前分析估算方法:在计算机程序编制前,依据统计方法对算法进行估算。

一个用高级程序语言编写的程序在计算机上运行时所消耗的时间取决于下列因素:

1.算法采用的策略、方法。(算法好坏的根本)

2.编译产生的代码质量。(软件支持)

3.问题的输入规模。

4.机器执行指令的速度。(硬件性能)

抛开计算机硬件、软件有关的因素,一个程序的运行时间,依赖于算法的好坏和问题的输入规模。所谓问题输入规模是指输入量的多少。

测定运行时间最可靠的方法就是计算对运行时间有消耗的基本操作的执行次数。运行时间与这个计数成正比。

算法设计的要求

一、正确性

正确性:算法的正确性是指算法至少应该具有输入、输出和加工处理无歧义性、能正确反映问题的需求、能够得到问题的正确答案。

算法“正确”的层次:

1.算法程序没有语法错误

2.算法程序对于合法的输入数据能够产生满足要求的输出结果。

3.算法程序对于非法的输入数据能够得出满足规格说明的结果。(一般以此为正确的标准)

4.算法程序对于精心选择的,甚至刁难的测试数据都有满足要求的输出结果。

二、可读性

可读性:算法设计的另一目的是为了便于阅读、理解和交流。(算法好坏的重要标志)

三、健壮性

健壮性:当输入数据不合法时,算法也能做出相关处理,而不是产生异常或莫名其妙的结果。

四、时间效率高和存储量低

 

ascii码对照表

ASCII控制字符

二进制 十进制 十六进制 缩写 可以显示的表示法 名称/意义
0000 0000 0 00 NUL 空字符(Null)
0000 0001 1 01 SOH 标题开始
0000 0010 2 02 STX 本文开始
0000 0011 3 03 ETX 本文结束
0000 0100 4 04 EOT 传输结束
0000 0101 5 05 ENQ 请求
0000 0110 6 06 ACK 确认回应
0000 0111 7 07 BEL 响铃
0000 1000 8 08 BS 退格
0000 1001 9 09 HT 水平定位符号
0000 1010 10 0A LF 换行键
0000 1011 11 0B VT 垂直定位符号
0000 1100 12 0C FF 换页键
0000 1101 13 0D CR 归位键
0000 1110 14 0E SO 取消变换(Shift out)
0000 1111 15 0F SI 启用变换(Shift in)
0001 0000 16 10 DLE 跳出数据通讯
0001 0001 17 11 DC1 设备控制一(XON 启用软件速度控制)
0001 0010 18 12 DC2 设备控制二
0001 0011 19 13 DC3 设备控制三(XOFF 停用软件速度控制)
0001 0100 20 14 DC4 设备控制四
0001 0101 21 15 NAK 确认失败回应
0001 0110 22 16 SYN 同步用暂停
0001 0111 23 17 ETB 区块传输结束
0001 1000 24 18 CAN 取消
0001 1001 25 19 EM 连接介质中断
0001 1010 26 1A SUB 替换
0001 1011 27 1B ESC 跳出
0001 1100 28 1C FS 文件分割符
0001 1101 29 1D GS 组群分隔符
0001 1110 30 1E RS 记录分隔符
0001 1111 31 1F US 单元分隔符
0111 1111 127 7F DEL 删除

ASCII可显示字符

二进制 十进制 十六进制 图形
0010 0000 32 20 (空格)(␠)
0010 0001 33 21 !
0010 0010 34 22
0010 0011 35 23 #
0010 0100 36 24 $
0010 0101 37 25  %
0010 0110 38 26 &
0010 0111 39 27
0010 1000 40 28 (
0010 1001 41 29 )
0010 1010 42 2A *
0010 1011 43 2B +
0010 1100 44 2C ,
0010 1101 45 2D
0010 1110 46 2E .
0010 1111 47 2F /
0011 0000 48 30 0
0011 0001 49 31 1
0011 0010 50 32 2
0011 0011 51 33 3
0011 0100 52 34 4
0011 0101 53 35 5
0011 0110 54 36 6
0011 0111 55 37 7
0011 1000 56 38 8
0011 1001 57 39 9
0011 1010 58 3A :
0011 1011 59 3B ;
0011 1100 60 3C <
0011 1101 61 3D =
0011 1110 62 3E >
0011 1111 63 3F ?
二进制 十进制 十六进制 图形
0100 0000 64 40 @
0100 0001 65 41 A
0100 0010 66 42 B
0100 0011 67 43 C
0100 0100 68 44 D
0100 0101 69 45 E
0100 0110 70 46 F
0100 0111 71 47 G
0100 1000 72 48 H
0100 1001 73 49 I
0100 1010 74 4A J
0100 1011 75 4B K
0100 1100 76 4C L
0100 1101 77 4D M
0100 1110 78 4E N
0100 1111 79 4F O
0101 0000 80 50 P
0101 0001 81 51 Q
0101 0010 82 52 R
0101 0011 83 53 S
0101 0100 84 54 T
0101 0101 85 55 U
0101 0110 86 56 V
0101 0111 87 57 W
0101 1000 88 58 X
0101 1001 89 59 Y
0101 1010 90 5A Z
0101 1011 91 5B [
0101 1100 92 5C \
0101 1101 93 5D ]
0101 1110 94 5E ^
0101 1111 95 5F _
二进制 十进制 十六进制 图形
0110 0000 96 60 `
0110 0001 97 61 a
0110 0010 98 62 b
0110 0011 99 63 c
0110 0100 100 64 d
0110 0101 101 65 e
0110 0110 102 66 f
0110 0111 103 67 g
0110 1000 104 68 h
0110 1001 105 69 i
0110 1010 106 6A j
0110 1011 107 6B k
0110 1100 108 6C l
0110 1101 109 6D m
0110 1110 110 6E n
0110 1111 111 6F o
0111 0000 112 70 p
0111 0001 113 71 q
0111 0010 114 72 r
0111 0011 115 73 s
0111 0100 116 74 t
0111 0101 117 75 u
0111 0110 118 76 v
0111 0111 119 77 w
0111 1000 120 78 x
0111 1001 121 79 y
0111 1010 122 7A z
0111 1011 123 7B {
0111 1100 124 7C |
0111 1101 125 7D }
0111 1110 126 7E ~

PHP实现页面静态化

1-1 明确动态页面和静态页面

静态网页是由浏览器直接从服务器下载到浏览者所在机器上浏览的。
动态网页需要服务器执行(运算)成静态网页的内容,然后由浏览器下载到浏览者所在机器上浏览。
静态网页是任何网站的根基,因为浏览者浏览的内容永远是从服务器传回的静态网页的内容。
动态与静态网页并不矛盾,网站设计中往往是先使用DreamWeaver等工具设计静态网页,之后将PHP等程序嵌入静态网页中完成网站设计。
动态网页中一般会包含静态网页的内容,比如:PHP代码中通常包含HTML或CSS。
静态网页中不能包含动态网页的内容。比如:如果HTML中包含PHP的内容,那就是动态网页了。
动态网页通常与数据库相连,来完成页面的显示。比如:一个文章显示系统,可以只通过一个动态网页Display.php显示数据库中的多篇文章。而静态网页无法实现此功能。
采用动态网页可以实现很多动态功能,比如Blog登录,BBS讨论,购物车等。
由于动态网页需要服务器执行(运算),因此将消耗服务器资源,访问速度会慢于静态网页。
当网站有大数据量时,应该使用动态网页管理,减少网站维护工作量。
当网站服务器压力过大或者访问量太大时,应该使用静态页面显示。
当网站有大的数据量而且访问量很大时,应该使用动态页面管理维护网站内容,同时生成静态页面用于显示。
动态网页的网址显示方式通常带有”?”,比如http://www.mangolau.com/mangolau.php?id=999&name=monkey ,这种网址属于搜索引擎不友好的URL,应该使用urlrewrite改为静态网页的URL显示方式,比如类似于 http://www.mangolau.com/mangolau_999_monkey.html 的URL。
动态网页是需要服务器端执行的程序,由于人的原因可能使动态网页程序产生漏洞,这些漏洞可能会被黑客利用。比如我们常说的”挂马”。

1-2 关于优化页面相应时间

 

1-3 关于动态URL地址设置静态形式

1-4 静态化详细介绍

2-1 buffer认知

2-2 PHP实现页面纯静态化原理

2-3 纯静态化案例简介

2-4 纯静态化案例之步骤解析

2-5 纯静态化案例实现

2-6 触发系统生成纯静态化页面的三种方式

2-7 方式一:页面添加缓存时间

2-8 方式二:手动触发方式

2-9 方式三:crontab定时扫描程序

2-10 局部动态化案例实现(一)

2-11 局部动态化案例实现(二)

2-12 局部动态化案例实现(三)

3-1 PHP处理伪静态

3-2 WEB服务器rewrite配置

3-3 Apache下rewrite配置

3-4 Nginx下rewrite配置