memcache实战
文章目录
第一章 memcache的使用
1.1 添加key
add key flag expire length
//flag 标志,要求为一个正整数。memcached 基本文本协议,传输的东西,理解成字符串来存储.
//expire 有效期。设置缓存的有效期,有 3 种格式:设置秒数, 从设定开始数,第 n 秒后失效;时间戳, 到指定的时间戳后失效;设为 0. 不自动失效(有种误会,设为 0,永久有效.错误的)(编译 memcached 时,指定一个最长常量,默认是 30 天.所以,即使设为 0,30 天后也会失效.2:可能等不到 30 天,就会被新数据挤出去.)
//length 缓存的长度(字节为单位)
想:让你存一个 php 对象,和一个 php 数组,怎么办?
答:序列化成字符串,往出取的时候,自然还要反序列化成 对象/数组/json 格式等等.这时候, flag 的意义就体现出来了.比如, 1 就是字符串, 2 反转成数组 3,反序列化对象…
1.2 删除
delete key [time seconds]
删除指定的 key. 如加可选参数 time,则指删除 key,并在删除 key 后的 time 秒内,不允许 get,add,replace 操作此 key.
replace key flag expire length #替换 参数和 add 完全一样,不单独写
get key #查询 返回key的值
set key flag expire length #设置或修改值(集合了add 和 replace的功能)
incr/decr key int #增加/减少值的大小
注意:incr,decr 操作是把值理解为 32 位无符号来±操作的. 值在[0-2^32-1]范围内(应用场景------秒杀功能:一个人下单,要牵涉数据库读取,写入订单,更改库存,及事务要求, 对于传统型数据库来说,压力是巨大的.可以利用 incr/decr 功能, 在内存存储 count 库存量, 秒杀 1000 台,每人抢单主要在内存操作,速度非常快,抢到 count<=1000 的号人,得一个订单号,再去另一个页面慢慢支付)
infos #查询memcache信息
stats [...] #统计命令(把 memcached 当前的运行信息统计出来)
缓存有一个重要的概念: 命中率.
命中率是指: (查询到数据的次数/查询总数)*100%,如上, get_hits/(get_hits+get_misses) = 60+% , 的命中率.
flush_all #清空所有的存储对象
第二章 编译 PHP 及 memcached 扩展
1. 编译 apache+php
到 http://httpd.apache.org 下载 httpd 的源码,http://www.php.net 下载 php 的源码
-
apache编译:
tar zxvf http-2.2.45.tar.gz # cd http-2.2.45 # ./configure --prefix=/usr/local/httpd (你也可以指定自己的路径) #make && make install
-
php编译并与apache整合
yum install libxml2 libxml2-devel # tar zxvf php-xxx.tar.gz # cd php-xxx #./configure--prefix=/usr/local/php \ --with-apxs2=/usr/local/httpd/bin/apxs # make && make install # 2. 与 apache 整合 # vim 编辑 http.conf,添加如下 # addtype application/x-httpd-php .php # 3: 重启 apache
(注:如果在 configure 过程中,提示缺少 libxml2 的库,则如下操作:
yum install libxml2 libxml2-devel)
-
编译 php-memcache 扩展
动手编译 PHP 的各种扩展是很容易碰到,此以 memcache 扩展编译为例,
讲解 PHP 扩展的通用编译流程# 1.到软件的官方(如 memcached)或 pecl.php.net 去寻找扩展源码并下载解压 # 2: 进入到 path/memcache 目录 # 3: 根据当前的 php 版本动态的创建扩展的 configure 文件 #/xxx/path/php/bin/phpize \ --with-php-config=/xxx/path/php/bin/php-config #4: ./configure -with-php-config=/xxx/path/php/bin/php-config 5: make && make install #6:把生成的.so 扩展, 在 php.ini 里引入. #7:重启 apache
-
windows 下安装 php-memcached 扩展
- 通过 phpinfo()观察如下 3 个参数,即 php 版本, ts/nts, vc6/vc9
- 根据上步中的参数,到 http://downloads.php.net/pierre/ 下载匹配的 memcache.dll
- 再次观察 phpinfo()信息,找出 extension_dir, 并把下载的 memcache.dll 放入该路径.
- 并修改 php.ini, 加入 extension=php_memcache.dll,引入该 dll
- 重启 apache
第三章 memcached 实战
1. 缓存数据库查询结果
通过缓存数据库查询结果,减少数据库访问次数,以提高动态 Web 应用的速度、提高可扩 (伪代码如下)。
<?php
$sql = 'select goods_id,goods_name from ecs_goods where is_hot=1 limit 5';
// 判断 memcached 中是否缓存热门商品,如果没有,则查询数据库 $hot = array();
if( !($hot=$memcache->get($sql)) ) { $hot = $mysql->getAll($sql);
echo '<font color="red">查询自数据库</font>'; //从数据库取得数据后,把数据写入 memcached
$memcache->add($sql,$hot,0,300); // 并设置有效期 300 秒 } else {
echo '<font color="red">查询自 memcached</font>'; }
2. 中继 MySQL 主从延迟数据
MySQL 在做 replication 时,主从复制之间必然要经历一个复制过程,即主从延迟的时间.尤其是主从服务器处于异地机房时,这种情况更加明显.
把 facebook 官方的一篇技术文章,其加州的主数据中心到弗吉尼亚州的主从同步延期达到70ms;