Memcached

  • Post author:
  • Post category:其他




什么是Memcached


  • Memcached 是一个开源免费的高性能的分布式内存对象缓存系统、

  • 就是一个软件

  • 以key=>value形式存储数据 [‘name’=>”xiaoming”]

  • 所存储的信息在软件关闭后就销毁



Memcached的作用


  • 缓存数据提高动态网站的速度



Memcached的安装


//方法一

yum install memcached

//方法二

1.安装libevent (memcached依赖包)

tar -zvxflibevent-release-1.4.15-stable.tar.gz

cd libevent-release-1.4.15-stable

./autogen.sh

./configure -prefix=/usr

make && make install

2.安装memcache

tar-zvxf memcache-1.4.5.tar.gzcd memcache-1.4.5

./configure –prefix=/usr/local/memcachemake && makeinstall



Memcached的启动和连接


  • 启动命令 memcached-u root -p 11211 -d

  • 连接命令 telnet 127.0.0.1 11211 (如果没有telnet 先执行安装 yum install telnet -y)



Memcached的使用



  • 命令行

stats 查看memcached状态(不常用)

set (写入数据)

参数说明:

(键名)

(数字标识,对键名进行标记,无特殊意义写0)

(生命周期,时间单位秒10s,参数0代表永久有效)

(信息长度,单位字节)

get (获取指定数据)

delete (删除指定数据)

flush_all (清空数据)

qurt (退出命令行)


  • php代码

安装php-memcache扩展

1.下载

wget

https://github.com/websupport-sk/pecl-memcache/archive/refs/heads/php7.zip

2.解压

unzip php7.zip

3.进入目录

cd pecl-memcache-php7

4.执行phpize

/usr/local/php/bin/phpize

(宝塔路径/www/server/php/74/bin/phpize)

5.配置

./configure –with-php-config=/usr/local/php/bin/php-config

(宝塔路径/www/server/php/74/bin/php-config)

6.编译安装

make && make install

7.修改php配置文件

vim/usr/local/php/etc/php.ini

(宝塔路径/www/server/php/74/etc/php.ini)

extension_dir=”/usr/local/php/lib/php/extensions/no-debug-zts-20151012/”extension=”memcache.so”

8.重启apache

/www/server/apache/bin/apachectl restart

iptable -F 快速关闭防火墙


  • php-memcache使用

1.创建memcache对象

2.连接memcached服务器

3.写入数据/读取数据/删除数据

4.关闭连接


  • 数据缓存的实现

TP6框架连接memcache

  1. 修改配置文件/config/cache.php

// 更多的缓存连接
        'memcached'=>[
            // 驱动方式
            'type'=>'memcached',
            'port'=> "11211",
            // 服务器地址" 
            'host'=> "127.0.0.1",
            //m密码
        ]
  1. 控制器引入use think\facade\Cache;

        Cache::store('memcached')->set('0','456789');
        $md= Cache::store('memcached')->get('0');
        dump($md);//456789


  • 缓存类的封装

<?php
//文件名cache.php
class Cache
{
    //创建对象 单例模式
    public static function getInstance()
    {
        if(self::$cache == nul1) {
            self::$cache = new Memcache;
            $res = self::$cache-> connect('localhost',11211);
            //判断是否连接成功
            if($res === false){
                echo '连接失败!!'; die;
            }
          }
        return self::$cache;    
    }
    

    //写入缓存
    public static function set($key, $value, $lifetime)
    {
        //实例化对象
        return self::getInstance()->set($key,$value,MEMCACHE_COMPRESSED,$lifetime);
           //返回值
          //返回key对应的存储元素的字符串值或者在失败或key未找到的时候返回FALSE。
    }
    //读取缓存
    public static function get($key)
    {
        return self::getInstance()->get($key);
    }
    //检测缓存是否存在
    public static function has($key)
    {
        return self::get($key) === false ? false : true;
    }
}
?>
<?php

    include  ./cache.php';

    $key = 'singer_10';

    //读取缓存

    if(!Cache::has($key)) {
        echo 'from mysql<br>'
        //获取表数据
        include "./1ibs/Model.php";
        $singer = new Model('singers');
        $data = $singer->first(1);
        //写入缓存
        Cache::set($key, $data, 3e);
     }else{
        echo 'from cache<br>!
        $data = Cache::get($key);
     }

     var_dump($data);

  • session数据的memcache存储

<?php
      session_start();//启动session
      $_SESSION['name']="xiaoming";
      echo $_SESSION['name']; //xiaoming
?>

session_set_save_handler 设置用户自定义会话存储函数

<?php
    session_set_save_handler('open','close','read','write',destroy', 'gc');
    $mem = new Memcache;
    $mem->connect('localhost',11211);
    // session_start
    function open() {
        return true;
    }
    function close() {
    }
    //echo $_SESSION[ name']
    function read($sid) {
        
    }
    //$_SESSION['name']='i love you';
    function write($sid,$data) {
        Cache::set($sid,$data,60);
        return true;
    }
    //session_destory
    function destory(){
    }
    //垃圾回收机制触发时会执行该函数
    function gc(){
    }
    //启动session_start();
    
    //写入session
    $_SESSION['name'] = "xiaoming";
    

?>



版权声明:本文为qq_39702981原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。