zoukankan      html  css  js  c++  java
  • linux安装memcached

    一:为什么要使用memcached
    瓶颈:互联网发展,特别在web2.0兴起之后,传统数据库开始出现瓶颈
    1:对数据库的高并发读写
    2:对海量数据库的处理(海量数据查找)
    memcache 是高性能的分布式内存缓存服务器,通过缓存数据库查询结果,减少数据库访问次数,已提高动态web应用的速度和扩展。
    保存在memcache的对象实际上是放置在内存中,并不是保存在 cache 文件中的,这也是memcache高效的原因之一,从内存数据要比硬盘快很多倍。注意,这些对象并不是持久的,服务停止之后,里边的数据就会丢失。
    缺点:存储对象并不是持久的,服务器停止数据就会丢失。
    memcache本身是为了缓存而设计的服务器,内存达到一定值,就会使用LRU算法自动删除不常使用的缓存。

    二:安装memcached的服务器
    memcached官网: http://memcached.org

    两种安装方式,1:源码包安装 2:yum源安装
    (1)源码包安装:
    1.memcached-1.4.25 //Memcached服务端.
    2.memcached-2.2.0 //Memcached服务PHP的扩展之一Memcached扩展,其实Memcached扩展有两种,还有一种叫Memcache,不过Memcached比Memcache功能更强大. Memcached不支持windows(https://pecl.php.net/package/memcached)
    memcache-3.0.8 //Memcached服务PHP的扩展之一Memcache扩展 有windows扩展(https://pecl.php.net/package/memcache)
    3.libevent-1.4.14b-stable //Memcached服务端的依赖包.
    4.libmemcached-1.0.18 //Memcached扩展的依赖包.
    注php memcached客户端除此两种之外,还有一种方法,可以避开扩展、重新编译所带来的麻烦,那就是直接使用 php-memcached-client,但是效率会比扩展库稍差一些。
    php的memcached客户端(memcache memcached)的区别参考:
    http://blog.csdn.net/juan083/article/details/49432711
    http://blog.csdn.net/baidu_30000217/article/details/53586536
    http://blog.csdn.net/lein_wang/article/details/52756859
    这三篇文章已经分析的很透测了

    #先安装Memcached服务端的依赖包.
    tar -zxvf libevent-1.4.14b-stable.tar.gz
    cd libevent-1.4.14b-stable
    ./configure --prefix=/usr/local/libevent
    make
    make install

    #然后安装Memcached扩展的依赖包.
    https://launchpad.net/libmemcached
    tar -zxvf libmemcached-1.0.18.tar.gz
    cd libmemcached-1.0.18
    ./configure --prefix=/usr/local/libmemcached

    #接着安装Memcached服务端.
    tar -zxvf memcached-1.4.25
    cd memcached-1.4.25
    ./configure -prefix=/usr/local/memcached -with-libevent=/usr/local/libevent
    make && make install

    #启动memcached
    cd /usr/local/memcached/bin/memcached
    ./memcached -d -m 100 -u root -l 114.215.112.83 -p 11211 -c 512 -P /tmp/memcached.pid

    #接着安装Memcached服务PHP的扩展之一Memcached扩展
    http://pecl.php.net/package/memcached
    tar -zxvf memcached-2.2.0.tgz
    cd memcached-2.2.0
    /usr/local/php/bin/phpize
    ./configure --prefix=/usr/local/memcached --with-php- config=/usr/local/php/bin/php-config --with-libmemcached-dir=/usr/local/libmemcached --disable-memcached-sasl
    make && make install


    #接着安装Memcached服务PHP的扩展之一Memcache扩展
    https://pecl.php.net/package/memcache
    wget pecl.php.net/get/memcache-3.0.8.tgz
    tar -zxvf memcache-3.0.8 .tgz
    cd memcache-3.0.8
    /usr/local/php/bin/phpize
    ./configure --prefix=/usr/local/memcache --with-php- config=/usr/local/php/bin/php-config
    make && make install


    cd /usr/local/php/lib/
    vim php.ini
    extension=memcache.so
    extension=memcached.so
    重启apache

    使用memcache常用操作:
    <?php
    //连接Memcache
    $mem = new Memcache;
    $mem->connect("114.215.112.83", 11211);

    //保存数据
    $mem->set('key1', 'This is first value', 0, 60);
    $val = $mem->get('key1');
    echo "Get key1 value: " . $val ."<br>";

    //替换数据
    $mem->replace('key1', 'This is replace value', 0, 60);
    $val = $mem->get('key1');
    echo "Get key1 value: " . $val . "<br>";

    //保存数组数据
    $arr = array('aaa', 'bbb', 'ccc', 'ddd');
    $mem->set('key2', $arr, 0, 60);
    $val2 = $mem->get('key2');
    echo "Get key2 value: ";
    print_r($val2);
    echo "<br>";

    //删除数据
    $mem->delete('key1');
    $val = $mem->get('key1');
    echo "Get key1 value: " . $val . "<br>";

    //清除所有数据
    $mem->flush();
    $val2 = $mem->get('key2');
    echo "Get key2 value: ";
    print_r($val2);
    echo "<br>";

    //关闭连接
    $mem->close();
    ?>

    使用memcached连接
    使用memcached-client.php链接

    <
    ?php
    // 包含 memcached 类文件
    require_once('memcached-client.php');
    // 选项设置
    $options = array(
    'servers' => array('192.168.1.1:11211'), //memcached 服务的地址、端口,可用多个数组元素表示多个 memcached 服务
    'debug' => true, //是否打开 debug
    'compress_threshold' => 10240, //超过多少字节的数据时进行压缩
    'persistant' => false //是否使用持久连接
    );
    // 创建 memcached 对象实例
    $mc = new memcached($options);
    // 设置此脚本使用的唯一标识符
    $key = 'mykey';
    // 往 memcached 中写入对象
    $mc->add($key, 'some random strings');
    $val = $mc->get($key);
    echo "n".str_pad('$mc->add() ', 60, '_')."n";
    var_dump($val);
    // 替换已写入的对象数据值
    $mc->replace($key, array('some'=>'haha', 'array'=>'xxx'));
    $val = $mc->get($key);
    echo "n".str_pad('$mc->replace() ', 60, '_')."n";
    var_dump($val);
    // 删除 memcached 中的对象
    $mc->delete($key);
    $val = $mc->get($key);
    echo "n".str_pad('$mc->delete() ', 60, '_')."n";
    var_dump($val);
    ?>
    在一台或者多台机器启用一个或者多个进程,这里是在一台机器启用两个进程,使用两个端口:
    ./memcached -d -m 100 -u root -l 114.215.112.83 -p 11211 -c 512 -P /tmp/memcached.pid
    ./memcached -d -m 100 -u root -l 114.215.112.83 -p 11212 -c 512 -P /tmp/memcached.pid
    <?php
    //连接Memcache
    $mem = new Memcache;
    $mem->addServer("114.215.112.83", 11211);
    $mem->addServer("114.215.112.83", 11212);
    //保存数据
    $mem->set('key1', 'This is first value', 0, 60);
    $val = $mem->get('key1');
    echo "Get key1 value: " . $val ."<br>";
    //保存数组数据
    $arr = array('aaa', 'bbb', 'ccc', 'ddd');
    $mem->set('key2', $arr, 0, 60);
    $val2 = $mem->get('key2');
    echo "Get key2 value: ";
    print_r($val2);
    echo "<br>";
    //删除数据
    $mem->delete('key1');
    $val = $mem->get('key1');
    echo "Get key1 value: " . $val . "<br>";
    //关闭连接
    $mem->close();
    ?>

    Memcached一些特性和限制
    • 在 Memcached 中可以保存的item数据量是没有限制的,只有内存足够
    • Memcached单进程最大使用内存为2G,要使用更多内存,可以分多个端口开启多个Memcached进程
    • 最大30天的数据过期时间, 设置为永久的也会在这个时间过期,常量REALTIME_MAXDELTA
    60*60*24*30 控制
    • 最大键长为250字节,大于该长度无法存储,常量KEY_MAX_LENGTH 250 控制
    • 单个item最大数据是1MB,超过1MB数据不予存储,常量POWER_BLOCK 1048576 进行控制,
    它是默认的slab大小
    • 最大同时连接数是200,通过 conn_init()中的freetotal 进行控制,最大软连接数是1024,通过
    settings.maxconns=1024 进行控制
    • 跟空间占用相关的参数:settings.factor=1.25, settings.chunk_size=48, 影响slab的数据占用和步进方式

    (2)yum源安装:
    安装: yum search memcached 搜索memcached,有了,可以进行安装了 yum -y install memcached
    memcache关联php安装 :
    yum -y install php-pecl-memcache
    安装php扩展:
    先装:yum install php-devel
    后装:pecl install memcache
    //PHP的Memcached扩展,其实Memcached扩展有两种,还有一种叫Memcache,不过Memcached比Memcache功能更强大.

    启动memcached的服务端:
    yum安装默认情况下memcached安装到/usr/local/bin下,进入安装目录之后,
    ./memcached -d -m 100 -u root -l 192.168.80.130 -p 11211 -c 512 -P /tmp/memcached.pid
    获取运行状态:ps -ef|grep memcached


    memcached -h可以查看memcached的参数


    注:
    -d选项是启动一个守护进程,
    -m是分配给Memcache使用的内存数量,单位是MB.这里是100MB,默认是64MB
    -u是运行Memcache的用户,这里是root.
    -l是监听的服务器IP地址,默认是本机.
    -p是设置Memcache监听的端口,默认是11211,最好是1024以上的端口.
    -c选项是最大运行的并发连接数,默认是1024,这里设置512,按照你服务器的负载量来设定.
    -P是设置保存Memcache的pid文件位置.
    -h 打印帮助信息
    -v 输出警告和错误信息
    -vv 打印客户端的请求和返回信息

    使用telnet连接memcached服务:telnet 192.168.80.130 11211
    stats查看状态,flush_all:清楚缓存
    查看memcached状态的基本命令,通过这个命令可以看到如下信息:


    注:
    STAT pid 22459 进程ID
    STAT uptime 1027046 服务器运行秒数
    STAT time 1273043062 服务器当前unix时间戳
    STAT version 1.4.4 服务器版本
    STAT pointer_size 64 操作系统字大小(这台服务器是64位的)
    STAT rusage_user 0.040000 进程累计用户时间
    STAT rusage_system 0.260000 进程累计系统时间
    STAT curr_connections 10 当前打开连接数
    STAT total_connections 82 曾打开的连接总数
    STAT connection_structures 13 服务器分配的连接结构数
    STAT cmd_get 54 执行get命令总数
    STAT cmd_set 34 执行set命令总数
    STAT cmd_flush 3 指向flush_all命令总数
    STAT get_hits 9 get命中次数
    STAT get_misses 45 get未命中次数
    STAT delete_misses 5 delete未命中次数
    STAT delete_hits 1 delete命中次数
    STAT incr_misses 0 incr未命中次数
    STAT incr_hits 0 incr命中次数
    STAT decr_misses 0 decr未命中次数
    STAT decr_hits 0 decr命中次数
    STAT cas_misses 0 cas未命中次数
    STAT cas_hits 0 cas命中次数
    STAT cas_badval 0 使用擦拭次数
    STAT auth_cmds 0
    STAT auth_errors 0
    STAT bytes_read 15785 读取字节总数
    STAT bytes_written 15222 写入字节总数
    STAT limit_maxbytes 1048576 分配的内存数(字节)
    STAT accepting_conns 1 目前接受的链接数
    STAT listen_disabled_num 0
    STAT threads 4 线程数
    STAT conn_yields 0
    STAT bytes 0 存储item字节数
    STAT curr_items 0 item个数
    STAT total_items 34 item总数
    STAT evictions 0 为获取空间删除item的总数

    退出telnet ctrl+]
    然后再输入quit

    在php.ini中添加 extension=memcache.so
    则在phpinfo中出现

    selinux是一套linux的安全系统,它指定了应用程序可以访问的磁盘文件、网络端口等等。如果装有selinux,那么默认的selinux 会阻止memcache程序访问11211端口,所以必须对selinux进行配置才行。
    编辑 /etc/selinux/config 文件,将 SELINUX=enforcing 改为 SELINUX=disabled 或者SELINUX=0

    测试:
    < ?php
    $mem = new Memcache; //创建memecache对象
    $dd = $mem->connect('192.168.1.104','11211') or die('connect die'); //连接memcached服务器
    $mem->set('key','this is memcache test'); //存储数据
    $val = $mem->get('key'); //获取数据
    echo $val;//输出数据
    $mem->delete('key');//删除数据
    $mem->flush();//强制刷新全部缓存,即清空memcahced服务器
    $mem->close();//断开与memcached服务器连接
    ?>

    在一台或者多台机器启用一个或者多个进程,这里是在一台机器启
    用两个进程,使用两个端口:
    #./memcached -d -u nobody -m 512 127.0.0.1 -p 11211
    #./memcached -d -u nobody -m 512 127.0.0.1 -p 11212
    源码打印?
    <?php
    //连接Memcache
    $mem = new Memcache;
    $mem->addServer("localhost", 11211);
    $mem->addServer("localhost", 11212);
    //保存数据
    $mem->set('key1', 'This is first value', 0, 60);
    $val = $mem->get('key1');
    echo "Get key1 value: " . $val ."<br>";
    //保存数组数据
    $arr = array('aaa', 'bbb', 'ccc', 'ddd');
    $mem->set('key2', $arr, 0, 60);
    $val2 = $mem->get('key2');
    echo "Get key2 value: ";
    print_r($val2);
    echo "<br>";
    //删除数据
    $mem->delete('key1');
    $val = $mem->get('key1');
    echo "Get key1 value: " . $val . "<br>";
    //关闭连接
    $mem->close();
    ?>


  • 相关阅读:
    汤圆只有汤没有圆了,过了过了
    CommonJS
    What is Socket.IO?
    白话PGP/GPG
    汤圆只有汤没有圆了,过了过了
    npm for nodejs
    Running Daemontools under Ubuntu 8.10
    ubuntu seahouse
    node.js入门
    my blog zen :分享所学,backup一切~
  • 原文地址:https://www.cnblogs.com/chy123/p/8616496.html
Copyright © 2011-2022 走看看