• 专注于网站建设,网络推广,关键词优化,SEO优化,专业的网站建设开发团队!

叶景网络之memcached 学习笔记

2015-06-13 17:10:24   来源:叶景网络
    memcached 是一个高效的分布式的内存对象系统,他可以支持把各种php的数据放入到它管理的内存中。
    可以放入的数据:对象、数组、基本数据类型。【资源不可以】
    ---------------------------------------------------------
    memcached 的安装步骤:
    1.下载memcached软件
    2.把安装文件:memcached.exe复制到PHP环境中便于管理。【不在php环境中也是可以的】
    3.安装memcached -d install
    4.卸载使用 memcached -d  unstall
    5.启动memcached 服务[a.直接用界面来启动服务。b.在控制台下启动memcached -dstart]
    6.查看memcached 服务是否启动成功,默认端口11211【netstat -an 查看端口或用netstat -anb】
    特别说明:
    一、如果网站,需要的memcached的内存大于65M应这样启动memcached -m 256m -dstart
    二、LRU是一个算法,缓存里在些久不用的,会删除掉。
    三、换端口:memcached -d -m 30 -l 127.0.0.1 -p 9000 -d start
    几个常用端口:
    80 apache  
    21 ftp 
    23 telnet 
    3306 mysql
    1521 oracle  
    1433 sql server
    8080 tomcat
    ==============================
    memcached常用的基本命令
    ==============================
    memcached的基本命令(安装、卸载、启动、配置相关):
    -p 监听的端口 
    -l 连接的IP地址, 默认是本机  
    -d start 启动memcached服务 
    -d restart 重起memcached服务 
    -d stop|shutdown 关闭正在运行的memcached服务 
    -d install 安装memcached服务 
    -d uninstall 卸载memcached服务 
    -u 以的身份运行 (仅在以root运行的时候有效) 
    -m 最大内存使用,单位MB。默认64MB 
    -M 内存耗尽时返回错误,而不是删除项 
    -c 最大同时连接数,默认是1024 
    -f 块大小增长因子,默认是1.25 
    -n 最小分配空间,key+value+flags默认是48 
    -h 显示帮助
    memcached的基本命令(当memcached 启动后 用于对memcached管理的数据和本身运行状态相关的命令):
    Command Description Example
    get Reads a value get mykey
    set Set a key unconditionally set mykey 0 60 5
    add Add a new key add newkey 0 60 5
    replace Overwrite existing key replace key 0 60 5
    append Append data to existing key append key 0 60 15
    prepend Prepend data to existing key prepend key 0 60 15
    incr Increments numerical key value by given number incr mykey 2
    decr Decrements numerical key value by given number decr mykey 5
    delete Deletes an existing key delete mykey
    flush_all Invalidate specific items immediately flush_all
    Invalidate all items in n seconds flush_all 900
    stats Prints general statistics stats
    Prints memory statistics stats slabs
    Prints memory statistics stats malloc
    Print higher level allocation statistics stats items
    stats detail
    stats sizes
    Resets statistics stats reset
    version Prints server version. version
    verbosity Increases log level verbosity
    quit Terminate telnet session quit
    对查看的信息的关键字中英文对照表
    pid memcache服务器的进程ID
    uptime 服务器已经运行的秒数
    time 服务器当前的unix时间戳
    version memcache版本
    pointer_size 当前操作系统的指针大小(32位系统一般是32bit)
    rusage_user 进程的累计用户时间
    rusage_system 进程的累计系统时间
    curr_items 服务器当前存储的items数量
    total_items 从服务器启动以后存储的items总数量
    bytes 当前服务器存储items占用的字节数
    curr_connections 当前打开着的连接数
    total_connections 从服务器启动以后曾经打开过的连接数
    connection_structures 服务器分配的连接构造数
    cmd_get get命令(获取)总请求次数
    cmd_set set命令(保存)总请求次数
    get_hits 总命中次数
    get_misses 总未命中次数
    evictions 为获取空闲内存而删除的items数(分配给memcache的空间用满后需要删除旧的items来得到空间分配给新的items)
    bytes_read 总读取字节数(请求字节数)
    bytes_written 总发送字节数(结果字节数)
    limit_maxbytes 分配给memcache的内存大小(字节)
    threads 当前线程数
    ======================================
    ---------------------------------------------------------------------
    使用:
    一.telnet -->memcached 缓存系统(教学)
    crul(create/read/update/delete)
    添加:连接到memcached 
    telnet 127.0.0.1 11211
    add name 0 60 5 [说明:add是指令名,name是key的名字(key就唯一的),60表示数据存放时间为60s,5表示放入多大的数据]
    get name (获取数据)
    --------------------
    set name 0 60 5 [如果name的这个key存在,刚更新,如果不存在,则添加]
    使用memcache扩展来操作memcached缓存系统
    步骤
    1.把扩展文件放到php环境下的ext文件目录下
    2.修改配置文件php.ini(开户扩展功能):extension=php_memcache.dll
    二.php程序(1.memcache 扩展 2.memcached 扩展 3.使用socket 访问)-->memcache缓存系统
    memcache 扩展
    memcached.php
    <?php
    /*===========================
    向内存写入值
    ===========================*/
    //实例化一个memcache对象
    $mem=new Memcache;
    //连接到指定的memcache中
    $mem->connect("127.0.0.1",11211);
    //$mem->add("name","zhoushiyong",0,30);//0表示不压缩,30表示时间为30秒
    if(!$mem->add("name","zhoushiyong",0,30)){
    echo "已经存在这个key了!<br>";
    }else{
    echo "OK!<br>";
    }
    //-------------存放数值---------------------
    if(!$mem->add("age","23",0,30)){
    echo "已经存在这个key了!<br>";
    }else{
    echo "OK!<br>";
    }
    //-------------可以放入boolean值---------------------
    if(!$mem->add("ok",false,0,30)){
    echo "已经存在这个key了!<br>";
    }else{
    echo "OK!<br>";
    }
    //----------------放入数组---------------------
    $arr=array("北京","上海");
    //对数组序列化
    //$arr1=serialize($arr);//防止数据类丢失
    if(!$mem->add("arr",$arr,0,30)){
    echo "已经存在这个key了!<br>";
    }else{
    echo "OK!<br>";
    }
    //----------------放入对象----------------------
    require "Person.class.php";
    $person=new Person(10,"zhoushiyong");
    $mem->add("per1",$person,30);
    //取出
    $per2=$mem->get("per1");
    var_dump($per2);
    echo "对象的名字是:". $per2->name;
    ?> 
    ------------------------------------------------------------------------------------
    memcachedqu.php
    <?php
    /*===========================
    //用于获取内存中的数据
    ===========================*/
    $mem=new Memcache;
    $mem->connect("127.0.0.1",11211);
    if($val=$mem->get("name")){
    echo "值为value=".$val."<br>";
    }else{
    echo"内存中没有这个值<br>";
    }
    //---------获取数值----------------
    if($val=$mem->get("age")){
    echo "值为value=".$val."<br>";
    }else{
    echo"内存中没有这个值<br>";
    }
    //---------布尔值----------------
    if($val=$mem->get("ok")){
    echo "值为value=".$val."<br>";
    }else{
    echo"内存中没有这个值<br>";
    }
    //结果为“ 空 ” 当为ture时返回是1
    //---------获取数组----------------
    if($val=$mem->get("arr")){
    echo "值为value=".$val."<br>";
    print_r($val);
    }else{
    echo"内存中没有这个值<br>";
    }
    //---------获取对象----------------
    /*
    require "Person.class.php";
    if($val=$mem->get("per1")){
    echo "值为value=".$val."<br>";
    var_dump($val);
    }else{
    echo"内存中没有这个值<br>";
    }
    */
    ?>
    ----------------------------------------------------
    Person.class.php
    <?php
    class Person{
    public $age;
    public $name;
    public function __construct($age,$name){
    $this->age=$age;
    $this->name=$name;
    }
    ?>
    ======================================
    $mem=new Memcache();
    //如果我们网站, 中我多个memcached缓存系统
    //创建多个memcache服务使用(可实现负载均衡)
    $mem->addServer("192.168.1.104",11211);
    $mem->addServer("192.168.1.105",11211);
    $mem->addServer("192.168.1.106",11211);
    $mem->add("name","zs",0,100);
    ======================================================
    使用socket(当我们没有权限修改PHP.ini时使用)
    ======================================================
    下载:memcached-client.php
    代码如下:
    <?php
    require_once 'memcached-client.php';
    $mc = new memcached(array(
    'servers' => array('127.0.0.1:11211','112.168.1.107:11211'),//当用多个memcached服务器时,用逗号分开即可。
    'debug' =>false,//是否要调试
    'compress_threshold' => 10240,//最大压缩率
    'persistant' => true));//是否保持长连接
    //$mc->add('key', array('some', 'array'));
    $mc->add('key', "zhoushiyong");
    //  $mc->replace('key', 'some random string');
    $val = $mc->get('key'); 
    echo "Key=".$val;
    ?>
    ====================================================================
    memcached缓存机制:
    1.是c/s结构的使用简单文本通讯
    2.基于libevent处理并发
    3.基于内存缓存
    4.是基于客户端的分布式(负载均衡)
    ------------------------------------------------
    memcached的细节
    生命周期:是在add数据的时候指定的
    memcached是放在memcached所在机器的内存的
    memcached 最佳实践
    伪代码:
    <?php
    $str_id+=$_GET['id'];
    //到memcached缓存中,看看有没有学生的信息
    if(memcached 中有){
    //取出学生信息
    exit;
    }else{
    //到数据库中查询
    //显示
    //把从数据库中获取的结果,放入到memcached中
    }
    ?>
    //-------------------------------
    实例代码:
    <?php
    $str_id+=$_GET['id'];
    //到memcached缓存中,看看有没有学生的信息
    $mem=new Memcahce;
    if($info=$mem->get($str_id)){
    //取出学生信息
    echo $info;
    exit;
    }else{
    ob_start();
    //到数据库中查询
    $conn=..
    //显示\
    echo "";
    //把从数据库中获取的结果,放入到memcached中
    $mem->add($str_id,ob_get_contents,MEMCACHE_COMPRESSED,60*60*24);
    }
    ?>
    //---------------------------------------------------------------------------------------------
    当session 数据也要放入缓存中的时
    //-------------------------------------------------------------------------
    在默认情况下,sesion 数据放在文件中的C:/windows/temp
    步骤:  
    1.开启memacache扩展
    2.php.ini中session.save_handler=memcache
    3.php.ini 中session.save_path=tcp://localhost:11211
    4.也可以通过php函数ini_set()函数在页面设置
    //--------------------------------------------------------------------------
    <?php 
    session_start();
    $_SESSION['name']="zhoushiyong";
    //现在我们希望把session中的数据放入memcached中
    echo session_id()."<br>";
    echo $_SESSION["name"];   //session默认存放最大时间1440s
    ?>
    //======================================
    memcached的安全性:
    windows 下,设置防火墙,只开放80端口(关闭11211端口)【同一个服务器】
    linux下,设置防火墙,iptables -a input -p 协议 -s 可以访问 ip -dport 端口 -jACCEPT
    //======================================
    什么的数据适合放在memcached中??
    //======================================
    变化频繁,具有不稳定性的数据,但不需要入库,比如用户在线状态,在线人数。
    门户网站的的新闻等,觉得页面静态化不能满足需求,可以放入memcached中
    //======================================
    什么的数据不适合放在memcached中??
    //======================================
    1.实例变化的数据,比如:银行,股票的数据,【注:需要入库的】
    2.过大的数据不能放入memcached中,比如,优酷网。
叶景网络,网络推广,网站建设
特别推荐RECOMMEND
搜索引擎网站关键词seo优化的意义
视频推广怎么做
网站seo优化怎么做关键词排上首页?
SEO介绍什么叫搜索引擎网站关键词优化
seo优化怎样做提升关键词排名
热点图文Hot
没有加www域名打不开的解决方案 没有加www域名打不
叶景网络之CodeIgniter框架的学习 叶景网络之CodeIgni
叶景网络之Ajax学习笔记 叶景网络之Ajax学习
叶景网络之DIV+CSS学习笔记 叶景网络之DIV+CSS
关注排行RANKING
1

没有加www域名打不开的解决方案

没有加www域名打不开的解决方案 网站上线了,在做SEO时发现没带www的时候访问不了,是以前的域名绑定时没做好,这对se...

2

叶景网络之CodeIgniter框架的学习

叶景网络之CodeIgniter框架的学习 叶景网络(www cngxit com),致力于互联网品牌建设与网络营销,专业领域包括网站建...

3

叶景网络之Ajax学习笔记

叶景网络之Ajax学习笔记 叶景网络(www cngxit com),致力于互联网品牌建设与网络营销,专业领域包括网站建...

4

叶景网络之DIV+CSS学习笔记

叶景网络之DIV+CSS学习笔记 叶景网络(www cngxit com),致力于互联网品牌建设与网络营销,专业领域包括网站建设...

5

叶景网络之SQL注入与安全学习笔记

叶景网络之SQL注入与安全学习笔记 叶景网络(www cngxit com),致力于互联网品牌建设与网络营销,专业领域包括网站建...

6

叶景网络之Mysql常用命令学习笔记

叶景网络之Mysql常用命令学习笔记 叶景网络(www cngxit com),致力于互联网品牌建设与网络营销,专业领域包括网站建...

7

叶景网络之Mysql优化的学习笔记

叶景网络之Mysql优化的学习笔记 通俗地理解三个范式,对于数据库设计大有好处。 第一范式:1NF是对属性的原子性...

8

叶景网络之Gvim编辑器的学习笔记

叶景网络之Gvim编辑器的学习笔记 叶景网络(www cngxit com),致力于互联网品牌建设与网络营销,专业领域包括网...

9

叶景网络之memcached 学习笔记

叶景网络之memcached 学习笔记 memcached 是一个高效的分布式的内存对象系统,他可以支持把各种php的数据放入...