zoukankan      html  css  js  c++  java
  • Memcached安装及配置

    一、Memcached介绍

    1、Memcached是国外社区网站LiveJournal团队开发,通过缓存数据库查询结果,减少数据库访问次数,从而提高动态web站点性能。

    2、官方站点http://memcached.org

    3、基于c/s架构,协议简单

    4、基于libevent的事件处理

    5、自主内存存储管理(slab allowcation)

    6、数据过期方式:Lazy Expiration和LRU

    7、程序员在开发时,自行调用Memcached的API,Memcached的功能才能生效

    Memcached:指的是服务器Server

    memcached:指的是php连接memcached服务可以使用的扩展,

    memcache:php连接Memcached服务可以使用的另一个扩展,没有memcached强大

    libmemcached:C库

    二、Slab allocation

    1、Slab Allocation的原理--将分配的内存分割成各种尺寸的块(chunk),并把尺寸相同的块分成组(chunk的集合),每个chunk集合被称为slab;

    2、Memcached的内存分配以Page为单位,Page默认值为1M,可以在启动时通过-l参数来指定;

    3、Slab是由多个Page组成的,Page按照大小切割成多个chunk。

    4、slab class:特定大小的chunk组

    三、Growth factor

    1、memcached在启动时通过-f选项可以指定Growth Factor因子。改值控制chunk大小的差异。默认值为1.25;

    2、通过memcached-tool查看指定memcached实例的不同slab状态,可以看到个Item所占大小(chunk大小)差距为1.25

    3、命令:# memcached-tool 127.0.0.1:11211 display

    四、Memcached数据过期方式

    1、Layy Expiration

       memcached内部不会监视记录是否过期,而是在get时查看记录的时间戳,检查记录是否过期。这种技术被称为lazy(惰性)expiration。因此,memcached不会再过期监视上耗费CPU时间。

    2、LRU(Least Recently Used)

       memecached会优先使用已超时的记录的空间,但即使如此,也会发生追加新纪录时空间不足的情况,此时就要使用名为Least Recently Used(LRU)机制来分配空间。顾名思义,这是删除“最近最少使用”的记录的机制。因此,当内存空间不足时(无法从slab class获取到新的空间时),就从最近未使用的记录中搜索,并将七空间分配给新的记录。从缓存的使用角度来看,该模型十分理想。

    五、Memcached安装

    1、安装epel扩展源

    # yum -y install epel-release

    2、memcached是基于libevent的,libmemcached是memcached的工具

    # yum -y install libevent memcached libmemcached

    3、启动memcached

    # /etc/init.d/memcached start

    4、memcache启动时的参数要在/etc/sysconfig/memcached文件中配置

    # vim /etc/sysconfig/memcached

    5、Memcached启动时参数

    -d:选项是启动一个守护进程

    -m:是分配给Memcached使用的内存数量,单位是MB

    -M:内存耗尽时返回错误而并非删除条目

    -u:是运行Memcached的用户,如果当前为root的话,需要使用此参数指定用户

    -l:是监听的服务器的IP地址

    -p:是设置Memcached监听的端口,默认是11211

    -c:选项是最大运行的并发连接数,默认是1024

    -n:chun的初始大小,key+value+flags,默认为48

    -P:是设置保存Memcached的pid文件

    六、查看memcached运行状态

    1、# memcached-tool 127.0.0.1 stats

    2、# echo stats | nc 127.0.0.1 11211需要安装nc的rpm包

       # yum -y install nc

    3、# memstat --servers=127.0.0.1:11211需要安装libmemcached         

       的rpm包

    七、Memcached命令行

    通过telnet连接Memcached

    # telnet 127.0.0.1 11211

    存取数据

    set key1 0 300 2

    12

    STORED

    get key1

    VALUE key1 0 2

    12

    END

    八、Memcached语法规则

    <command name><key><flags><exptime><bytes> <data block>

    注: 在windows下是Enter键

    1、<command name>可以是“set”,“add”,“replace”。

    “set”表示按照相应的<key>存储该数据,没有则增加,有则覆盖

    “add”表示按照相应的<key>添加该数据,但是如果该<key>已经存在则会操作失败

    “replace”表示按照相应的<key>替换数据,但是如果该<key>不存在则会操作失败

    2、<key>客户端需要保存数据的key

    3、<flags>是一个16位的无符号的证书(以十进制的方式表示)。该标志将和需要存储的数据一起存储,并在客户端get数据时返回。客户可以将此标志用作特殊用途,此标志对服务器来说是不透明的。

    4、<exptime>过期时间

    若为0表示存储的数据永远不过期(但可被服务器算法:LRU等替换)。如果非0(unix时间或者距离此时的秒数),当过期后,服务器可以保证用户得不到该数据(以服务器时间为准)

    5、<bytes>需要存储的内容,输入完成后,最后客户端需要加上“ ”(直接点击Enter)作为“命令头”的结束标志

    九、PHP连接Memcached

    先安装php的memcache扩展

    # tar zxvf memcache-2.2.3.tgz

    # cd memcache-2.2.3

    phpize属于php-devel包,源码包安装的选择源码包安装的位置,一般情况位于:

    /usr/local/php/bin/phpize

    # /usr/bin/phpize

    生成configure文件

    # ./configure --with-php-config=/usr/local/php/bin/php-config --enable-memcache

    # make &&  make install

    # vim /etc/php.ini

    extension = memcache.so

    extension_dir = "/usr/lib64/php/modules/"

    添加完成后用php -m查看一下是否有memcache模块

    下载个php测试一小下

    # curl www.apelearn.com/study_v2/.memcache.txt > 1.php 2>/dev/null

    # php 1.php如果出现下面信息说明配置正确:

    Get key1 value: This is first value<br>Get key1 value: This is replace value<br>Get key2 value: Array

    (

        [0] => aaa

        [1] => bbb

        [2] => ccc

        [3] => ddd

    )

    十、Memcached实现session共享

    在lamp/lnmp环境下实现的通用配置

    编辑php.ini添加下面两行

    session.save_handler = "memcache"

    session.save_path = "tcp://127.0.0.1:11211"

    或者编辑httpd.conf中对应的虚拟主机添加:

    php_value session.save_handler "memcache"

    php_value session.save_path "tcp://127.0.0.1:11211"

    或者php-fpm.conf对应的pool中添加

    php_value[session.save_handler] = memcache

    php_value[session.save_path] = "tcp://127.0.0.1:11211"

    IP地址是Memcached server的ip地址

    在nginx发布的目录下创建session.php,加入如下内容:

    <?php

    session_start();

    if (!isset($_SESSION['TEST'])) {

    $_SESSION['TEST'] = time();

    }

    $_SESSION['TEST3'] = time();

    print $_SESSION['TEST'];

    print "<br><br>";

    print $_SESSION['TEST3'];

    print "<br><br>";

    print session_id();

    ?>

    # curl -x127.0.0.1:80 localhost/session.php

    # telnet 127.0.0.1 11211

    get lundelrir281bbgi4p4d261tq5

    就可以看到Memcached中已经保存了session的信息了

    通过# curl -x127.0.0.1:80 localhost/phpinfo.php | grep session.save_path可以查看到memcache的配置信息

    也可以通过phpinfo.php在页面中的session项中看到memcache的配置信息

  • 相关阅读:
    序列化与反序列化
    JAVA常用设计模式(一、抽象工厂模式)
    JAVA基础部分复习(七、JAVA枚举类型使用)
    JAVA常用设计模式(一、单例模式、工厂模式)
    JAVA高级篇(二、JVM内存模型、内存管理之第一篇)
    JAVA高级篇(一、JVM基本概念)
    linux常用命令
    JAVA基础部分复习(六、常用关键字说明)
    JAVA基础部分复习(五、JAVA反射)
    JAVA基础部分复习(三、泛型)
  • 原文地址:https://www.cnblogs.com/fansik/p/5473652.html
Copyright © 2011-2022 走看看