• 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;
    在这里插入图片描述

  • 相关阅读:
    WPF 进度条
    WPF CPU使用率线性表
    Android annotation
    git 操作
    git 合并指定目录到master
    远程连接mysql报错,ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: NO)解决方案
    centos7 安装python2.7.14 并与原版本共存
    pycahrm 断点调试
    ImportError: No module named Crypto.Cipher 报错解决方法
    python操作 rabbitMQ
  • 原文地址:https://www.cnblogs.com/daozhangblog/p/12446474.html
Copyright © 2020-2023  润新知