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 的源码

  1. apache编译:

    tar zxvf http-2.2.45.tar.gz
    # cd http-2.2.45
    # ./configure --prefix=/usr/local/httpd (你也可以指定自己的路径) #make && make install
    
  2. 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)

  3. 编译 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
    
  4. windows 下安装 php-memcached 扩展

    1. 通过 phpinfo()观察如下 3 个参数,即 php 版本, ts/nts, vc6/vc9
    2. 根据上步中的参数,到 http://downloads.php.net/pierre/ 下载匹配的 memcache.dll
    3. 再次观察 phpinfo()信息,找出 extension_dir, 并把下载的 memcache.dll 放入该路径.
    4. 并修改 php.ini, 加入 extension=php_memcache.dll,引入该 dll
    5. 重启 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;
在这里插入图片描述

posted @ 2019-05-05 01:12  南山道士  阅读(69)  评论(0编辑  收藏  举报