php 优化

Apache 是对进程的管理(消耗的是CPU)对内存的消耗很少Memcache 是对内存的操作对 对内存的消耗大 对CPU的消耗小Memcache 基本命令格式<命令>  <>  <标记>  <有效期>  <数据长度> Memcache 主要用的是key=>value 的格式 1.某范围内随机

2. 碰撞要低

: add 往内存增加一行新记录

语法: add key flag expire length 回车

key 给值起一个独特的名字

flag 标志,要求为一个正整数

expire 有效期

length 缓存的长度(字节为单位)

flag 的意义:

memcached 基本文本协议,传输的东西,理解成字符串来存储.

:让你存一个 php 对象,和一个 php 数组,怎么办?

:序列化成字符串,往出取的时候,自然还要反序列化成 对象/数组/json 格式等等.

这时候, flag 的意义就体现出来了.

比如, 1 就是字符串, 2 反转成数组 3,反序列化对象.....

expire 的意义:

设置缓存的有效期, 3 种格式

1:设置秒数, 从设定开始数, n 秒后失效.

2:时间戳, 到指定的时间戳后失效.

比如在团购网站,缓存的某团到中午 12:00 失效. add key 0 1379209999 6

3: 设为 0. 不自动失效. 

: 有种误会,设为 0,永久有效.错误的.

 Memcache 没有集群之间相互管理的方案(自己去想办法) redis 集群在几台服务器上边自动的达到一个均衡 Tp5 默认是用file进行缓存 我们写的 小程序 就是用的文件保存但是 tp5中已经封装好了那些缓存 最终都是用cache进行调用的

incr ,decr 命令:增加/减少值的大小语法: incr/decr key num示例:

注意:incr,decr 操作是把值理解为 32 位无符号来+-操作的. 值在[0-2^32-1]范围内 

 

应用场景------秒杀功能, 个人下单,要牵涉数据库读取,写入订单,更改库存,及事务要求, 对于传统型数据库来说, 压力是巨大的. 可以利用 memcached incr/decr 功能, 在内存存储 count 库存量, 秒杀 1000 台每人抢单主要在内存操作,速度非常快, 抢到 count<=1000 的号人,得一个订单号,再去另一个页面慢慢支付

1:内存的碎片化如果用 c 语言直接 malloc,free 来向操作系统申请和释放内存时, 在不断的申请和释放过程中,形成了一些很小的内存片断,无法再利用. 这种空闲,但无法利用内存的现象,---称为内存的碎片化

2: slab allocator 缓解内存碎片化memcached slab allocator 机制来管理内存. slab allocator 原理: 预告把内存划分成数个 slab class 仓库.(每个 slab class 大小 1M)各仓库,切分成不同尺寸的小块(chunk). (图 3.2)需要存内容时,判断内容的大小,为其选取合理的仓库.

memcached 根据收到的数据的大小, 选择最适合数据大小的 chunk 组          (slab class)memcached 中保存着 slab class 内空闲 chunk 的列表, 根据该列表选择空的 chunk, 然后将数据缓存于其中。

分布式集群算法

memcached 如何实现分布式? 在第 1 章中,我们介绍 memcached 是一个分布式缓存”,然后 memcached 并不像 mongoDB 那 样,允许配置多个节点,且节点之间自动分配数据”. 就是说--memcached 节点之间,是不互相通信的. 因此,memcached 的分布式,要靠用户去设计算法,把数据分布在多个 memcached 节点中

分布式之取模算法最容易想到的算法是取模算法,N 个节点要,0->N-1 编号. key N 取模,i,key 落在第 i 台服务器上

取模算法对缓存命中率的影响假设有 8 台服务器, 运行中,突然down 一台, 则求余的底数变成7后果:

一般地,我们从数学上归纳之: N 台服务器, 变为 N-1 , N*(N-1)个数中, 只有(n-1)个单元,%N, %(N-1)得到相同的结果所以 命中率在服务器 down 的短期内, 急剧下降至 (N-1)/(N*(N-1)) = 1/(N-1)所以: 服务器越多, down 机的后果越严重!

 
登入/注册
卧槽~你还有脸回来
没有账号? 忘记密码?