• memchache


    Memcached 是国外 社区 网站 LiveJournal  的开发团队开发的 高性能的分布式内存缓存服务器。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态 Web 应用的速度、提高可扩展性。把经常使用到数据,放到内存缓存里。

    缓存穿透,就是缓存设置,没有实际使用到。

    缓存雪崩,通过memcache里的没有的数据,进行查询,mysql里实际中也没有这条数据,造成的结果,就是不断的查询memcache没有,再去查mysql也没有。

    <?php
    //使用php的memcache拓展
    //安装了拓展之后,就拥有了一个类
    //实列化类
    $mem = new Memcache;
    //连接memcache
    // $mem->connect('ip',port);
    // 服务使用是由ip和端口进行连接的
    // memcache默认端口号
    $mem->connect('127.0.0.1',11211);
    //写入数据
    //memcache存储是key=>value
    //set(key,value,是否压缩,是否过期 单位s)
    $rs=$mem->set('name','php',0,0);
    $info=$mem->get('name');
    //serialize() unserialize();  非标量数据使用序列化和返序列化
    
    $mem->add('name','gm',0,0);
    $mem->replace('name','666');
    
    $mem->set('key',0);
    $mem->decrement('key',1);
    $mem->increment('key',3);
    $mem->delete('key');
    $data=$mem->get('key');
    
    $mem->delete('name');
    $mem->flush();

    session共享机制

    默认session是存放在网站的目录里,生成的一个文件。存放要放在session里面的信息。所以需要把信息存储到其他地方(memcache)。

    <?php
    //设置session存放方式和存储路径  不修改php.ini
    ini_set('session.save_handler','memcache');
    ini_set('session.save_path','tcp://127.0.0.1:11211');
    //使用session需要开启
    session_start(); //session的写入 $_SESSION['name'] = 'php52'; //获取session $name = $_SESSION['name']; echo session_id(); echo '<br />'; var_dump($name);
    <?php
    //设置session存放方式和存储路径
    ini_set('session.save_handler','memcache');
    ini_set('session.save_path','tcp://127.0.0.1:11211');
    //使用session需要开启
    session_start();
    //只读取session
    var_dump($_SESSION['name']);
    <?php
    //使用php的memcache拓展
    //安装了拓展之后,就拥有了一个类
    //实列化类
    $mem = new Memcache;
    //连接memcache
    // $mem->connect('ip',port);
    // 服务使用是由ip和端口进行连接的
    // memcache默认端口号
    $rs = $mem->connect('127.0.0.1',11211);
    //读取session结果
    $data = $mem->get('fatmk44i2vkiqrs375j0vjjd33');
    var_dump($data);

    分布式memcache的运行

    在使用memcache中,一个memcache可能是不够用,在并发和数据存储上,可以使用多个memcache进行同时使用操作。运行多个memcache进行使用的操作,叫做分布式memcache的使用。

    memcached.exe  -l 127.0.0.1 -p 11212

    memcached.exe  -l 127.0.0.1 -p 11213

    memcached.exe  -l 127.0.0.1 -p 11214

    <?php
    //多个memcache使用,分布式memcache
    $mem = new Memcache;
    //向memcache连接池添加一个memcache服务器
    $mem->addServer('127.0.0.1', 11212);
    $mem->addServer('127.0.0.1', 11213);
    $mem->addServer('127.0.0.1', 11214);
    //写操作
    $rs1 = $mem->set('name','tom',0,0);
    $rs2 = $mem->set('age',18,0,0);
    $rs3 = $mem->set('job','php',0,0);
    $rs4 = $mem->set('sex',1,0,0);
    //输出写的结果
    var_dump($rs1);
    echo '<br />';
    var_dump($rs2);
    echo '<br />';
    var_dump($rs3);
    echo '<br />';
    var_dump($rs4);
    echo '<br />';
    //读操作
    $data1 = $mem->get('name');
    $data2 = $mem->get('age');
    $data3 = $mem->get('job');
    $data4 = $mem->get('sex');
    //输出写的结果
    var_dump($data1);
    echo '<br />';
    var_dump($data2);
    echo '<br />';
    var_dump($data3);
    echo '<br />';
    var_dump($data4);
    echo '<br />';

    memcache可以缓存mysql的数据库的数据,然后可以php直接访问内存缓存memcache,相比访问数据库,会更加快速,并发提高。

    <?php
    //读取数据默认读取memcache
    $mem = new Memcache;
    $mem->connect('127.0.0.1',11211);
    $memData = $mem->get('data');
    //每次获取memcache数据
    //如果不存储就到数据库查询,并缓存到memcache
    if(empty($memData)){
      //使用mysqli拓展进行连接,要确保php的mysqli是开启的。
      // $mysqli = new mysqli(ip,用户名,用户密码,连接的数据库)
      $mysqli = new mysqli('127.0.0.1','root','root','php_test');
      //sql语句
      $sql = 'select * from student1';
      //执行sql语句
      $rs = $mysqli->query($sql);
      // var_dump($rs);
      //取出数据
      $data = array();
      while ($row = $rs->fetch_row()) {
        $data[] = $row;
      }
      //数据从mysql取出之后,需要缓存到memcache里
      //设置过期时间,进行测试操作
      $mem->set('data',$data,0,10);
      echo 'this is mysql data';
      echo '<br />';
      var_dump($data);
    }else{
      echo 'this is memcache data';
      echo '<br />';
      var_dump($memData);
    }
  • 相关阅读:
    详细对比9门主流编程语言
    ZT在谷歌上班感受如何?
    林锐:5 C++/C程序的基本概念
    林锐书:写一个hello world by seasoned professional
    C 中重载一词中的“重”字读ZHONG4还是CHONG2?
    ZT C++ 重载、覆盖和隐藏的区别
    安全模式 冷启动
    Wi-Fi
    再谈男性饮食保健
    fstat、stat和lstat 区别(转)
  • 原文地址:https://www.cnblogs.com/mengor/p/10510190.html
Copyright © 2020-2023  润新知