• 20150323--memcache-02


    3、php操作memcache.

    (1)实例化一个对象。

    $mem = new Memcache();

    (2)连接memcache,使用connect函数。

    入门案例:

    wpsCE5.tmp

    (3)对存储的数据类型进行讨论。

    php的数据类型:标量数据类型的存储方式。

    wpsCF6.tmp

    获取的结果:

    wpsD06.tmp

    php的标量类型在memcac he里面存储都是转换成字符串的形式来存储的。

    php的数据类型:数组的形式。

    wpsD07.tmp

    在存储数组时,把数组序列化之后,存储到 memcache里面的,在取出数组数据时,自动给我们反序列化。数组的序列化和反序列化,是有add和get函数完成的, 无需我们自己干预。

    memcache内部存储。

    wpsD18.tmp

    取出的数组数据:

    wpsD29.tmp

    null值,

    对象类型的数据的存储,和数组一样,在存储之前要序列化,在取出后,要反序列化。序列化也是自动完成的,无需我们干预。

    对象数据:

    wpsD39.tmp

    对象数据也是序列化存储的,和数组一样的。在取出对象数据时,要有该对象类的声明。

    wpsD3A.tmp

    资源类型:不要存储 到memcache里面,语法角度是没有问题的 ,但是在取出时,则类型变成int(0)

    wpsD4B.tmp

    wpsD4C.tmp

    wpsD4D.tmp

    4、入门案例的使用。

    根据一个sql取出的数据,把sql取出的数据,给缓存到memcache里面,当下次再操作该sql语句的时候,则直接从memcache里面获取。核心思路:给sql做一个键。

    <?php

    $mem = new Memcache();

    $mem->connect('localhost',11210);

    //(1)要根据sql语句生成一个key

    $sql="select * from user limit 10";

    $key = md5($sql);//构建存储到memcache里面的键。

    //(2)根据该键从memcache里面取出数据,

    $data = $mem->get($key);

    //(3)要判断数据是否取出,如果取出,则直接使用该数据,如果取出失败则从数据库里面取出,

    //取出后,再把该数据写入到memcache 里面。

    if(empty($data)){

            echo 'a<br/>';

            $conn = mysql_connect('localhost','root','root');

            mysql_query('use php');

            mysql_query('set names utf8');

            $res = mysql_query($sql);

            $data = array();

            while($row=mysql_fetch_assoc($res)){

                    $data[]=$row;

            }

            //要存储到memcache里面,

            $mem->add($key,$data,0,1200);

    }

    ?>

    5、典型的一个案例应用2

    wpsD5D.tmp

    新闻列表页面:newslist.php

    新闻详情页面:shownews.php

    五、“分布式”缓存服务器的搭建

    可以使用多台memcache服务器一块协同工作,

    使用原理:

    wpsD7E.tmp

    思考:在取出数据是,如何取出?

    存储原理:使用分布式存储算法,该算法,集成到php客户端的扩展里面的,我们自己无需干预,

    我们使用分布式服务器,要取出数据时,操作方法,就和一台服务器一样,前提要和在存储数据时连接的服务器的个数顺序要一致。

    为什么要一致?

    答:因为在存储数据是,要使用算法(取模算法)

    比如:键的名字用数字来代替,使用3台memcache服务器。

    如何来定位促成呢?使用取模算法,

    假如键为34,和3取余数     ===1  就把该数据存储到第一台服务器上面来,

    假如键为60 和3取余数,======0   就把该数据存储到第三台服务器上面来。

    当取出键为34的数据,再和3取余数,====1,就去第一台服务器取出数据。

    设置页面:

    wpsD7F.tmpwpsD8F.tmpwpsD90.tmpwpsDA1.tmp

    wpsDD1.tmp

    六、把session数据给添加到memcache里面。

    使用原理:

    wpsDE1.tmp

    (1)要在php.ini文件里面设置session文件的存储位置

    session.save_handler=memcache

    wpsDE2.tmpwpsDF3.tmpwpsE04.tmp

    存储位置的设置可以为:files(默认的)users:用户自己定义的  memcache|redis

    (2)在php.ini文件中要设置session文件的存储路径,

    wpsE24.tmp

    session.save_path=”tcp://localhost:11211”,可以使用逗号分割,指定多台memcache服务器。

    比如:session.save_path=”tcp://192.168.10.1:11211,tcp://192.168.10.2:11210”

    如果自己没有 权限修改,php.ini文件里面的配置,则可以使用ini_set();该函数在页面中进行配置。该配置值针对当前页面有效。

    (3)如何存储session数据和如何取出session数据,和之前操作是一模一样的,该配置对用户操作是透明的。

    session文件数据在memcache里面存储是以sessionid为键的。

    wpsE35.tmp

    七、memcache细节讨论

    1、缓存周期(有效期)

    缓存周期的设置有两种方式:

    如果缓存周期设置为0表明此数据永不过期

    第一种使用:秒数,最大不能超过30天,即2592000秒,

    第二种使用:使用时间戳,该时间戳是到的哪个时间点。比如我们要把一个数据缓存60天,

    $mem->add($key,$value,0,time()+60*24*3600)

    2、惰性删除,

    就是说,缓存的数据,到期后,不会自动删除,当get数据的时候,查看有没有到期,如果到期了,则再删除该数据。

    memcache不会开启进程来监视键是否过期,省memcache的资源,也 省cpu.

    3、Least Recently UsedLRU

    最近 最少使用原则,

    当前存储的数据的在memcache里面空间已经占满后,则memcache会把不活跃(get或set次数比较少的)的数据(不管是否到期)清除,让新的数据给存储进来。

    4、安全性

    memcache定位就是做数据的缓存的,不是数据的持久存储的,因此没有做一些用户的验证,目的提高连接速度,发挥自己的独特功能。

    -l  ip地址。设置监听的ip地址。

    -l后面的ip地址是服务器自己的某个ip地址,不是客户端的ip地址

    wpsE45.tmp

    memcahe该软件本身没有提供一些安全机制,如果要限制使用,则只能在操作系统的层面来解决,比如window系统、安装防火墙的软件,在linux下面使用iptables,seclinux(安全机制)

    5、memcache比较适合于存储哪些数据。

    存储的数据的特点:

    访问比较频繁,

    安全性不高,丢失无所谓,

    修改比较频繁的数据,比如一些用户的在线状态,

  • 相关阅读:
    在客户端模拟调用srv和topic
    直流电机测试标准
    vue项目修改host实现地址代理,实现一键登录
    小程序 日期格式化
    ES6学习笔记之async函数
    ES6学习笔记之promise
    ES6学习笔记之箭头函数
    ES6学习笔记之var,let,const
    axios post后台接收不到参数
    vue-cli2配置scss遇到的各种坑
  • 原文地址:https://www.cnblogs.com/lifushan/p/5471664.html
Copyright © 2020-2023  润新知