zoukankan      html  css  js  c++  java
  • Memcached 数据缓存系统

    Memcached 数据缓存系统

     

    常用命令及使用:http://www.cnblogs.com/wayne173/p/5652034.html

    Memcached是一个自由开源的,高性能,分布式内存对象缓存系统。

    Memcached是一种基于内存的key-value存储,用来存储小块的任意数据(字符串、对象)。这些数据可以是数据库调用、API调用或者是页面渲染的结果。

    Memcached简洁而强大。它的简洁设计便于快速开发,减轻开发难度,解决了大数据量缓存的很多问题。它的API兼容大部分流行的开发语言。本质上,它是一个简洁的key-value存储系统。

    一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性

    内存管理机制:采用slab内存动态分配机制,采用lru对象清除机制。采用hash机制快速检索。


    Memcached服务端的安装:

    1,安装epel-release扩展源

    2.安装:事件触发的网络库.libevent libevent-devel

    3.安装:连接memcached的工具nc(查看工具

    4.安装memcached,libmemcached(客户端工具包可以不按照)当然memcached也有自动工具memcached-tool,也可查看。

    通过yum源安装即可,提前按照epel扩展源

    yum install -y libevent libevent-devel nc  memcached libmemcached

    查看是否安装成功

    rpm -qa libevent libevent-devel nc  memcached libmemcached

    查看命令路径:which memcached 为:/usr/bin/memcached

    启动:/etc/init.d/memcached start

    查看监听默认端口及进程:默认端口为:11211

    netstat -lnp|grep memcached

    ps -ef|grep memcached|grep -v grep

    lsof -i :11211

    相关参数如端口等.在/etc/init.d/memcached启动文件中或/etc/syscofig/memcached配置文件中定义。注释:只有更改/etc/sysconfig/memcached文件才生效。


     

    文件内容如下:vim /etc/syscofig/memcached

    PORT="11211"

    USER="memcached"

    MAXCONN="1024"

    CACHESIZE="64"

    OPTIONS=""

    :更改内存大小为128M CACHESIZE="128" 重启

    [root@bogon ~]# ps -aux|grep mem

    Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ

    root        843  0.0  0.0      0     0 ?        S    04:10   0:00 [vmmemctl]

    496        2818  0.0  0.0 330844   988 ?        Ssl  04:51   0:00 memcached -d -p 11211 -u memcached -m 128 -c 1024 -P /var/run/memcached/memcached.pid

    root       2852  0.0  0.0 103252   876 pts/1    S+   04:54   0:00 grep mem

    已经生效。

    Memcached启动参数

    -d 启动一个守护进程。

    -m 分配个memcache使用的内存熟路,单位是MB

    -u 运行memcache的用户,如果当前为root,需要使用此参数指定用户。

    -l 监听的服务器ip地址。

    -p 设定memcache监听的端口,默认11211

    -c 设置最大运行的并发连接数,默认为1024.

    -P设置保存Memcache的pid文件 保存pid到指定文件。

    默认没有指定ip,如果设置可以在配置文件中设置OPTIONS="-l 127.0.0.1"

    重启!Ps可以查看。


     

    Memcached可以同时启动多个实例如
    启动第一个实例:memcached -m 16m -p 11211 -d -u root -c 8192

    启动第二个实例memcached -m 16m -p 11212 -d -u root -c 8192

    ps -ef|grep memcache|grep -v grep

    可以加入/etc/rc.local中以便下次开机启动tail -2 /etc/rc.local

    /usr/bin/memcached -m 16m -p 11211 -d -u root -c 8192

    /usr/bin/memcached -m 16m -p 11211 -d -u root -c 8192

    查看运行状态命中多少数据,查看命令nc 提前我们已经安装过了nc

    查看memcached状态

    用自带工具查看:memcached-tool 127.0.0.1:11211 stats

    查看此工具由那个包安装的:rpm -qf `which memcached-tool` 由:memcached包安装的。

    查看比较多的有:get_hits命中了多少cmd_get总请求多少?等...通过此值可以算出命中率多少,最好不要第一百分之80.

    nc命令查看echo stats|nc 127.0.0.1 11211 和上面显示一致。

    用:memstat --servers=127.0.0.1:11211 libmemcached包安装的

    连接memcached进行管理 管理可用telnet ip 端口 管理也可用nc管理

    新手可以按照memadmin php工具第三方软件管理(memadmin-1.0.12.tar.gz)下载解压后将Memadmin 移动至站点根目录。注:必须支持php。

    mv memadmin /usr/local/apache2/htdocs 下浏览器访问:

    新手管理还是比较方便的。呵呵。


     

    Telnet 127.0.0.1 11211

    添加数据set key1 0 300 2  (键名为key,0为flags标记必须为10进制整数,300过期时间s,2表示字节。)

    回车显示STORED表示存储成功。

    查看数据get key1

    删除数据delete key1

    替换数值replace key1 0 300 2

    退出:quit

    查看memcached chunks等,占用大小:memcached-tool 127.0.0.1:11211 display。

    Mysql与memcached的对比:

    Mysql:insert  memcached:set

    Mysql:select  memcached: get

    Mysql:delete  memcached:delete

    Memcached的语法规则:

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

    在windows是Enter


     

    缓存管理命令

    stats 显示信息同上memcached-tool 127.0.0.1:11211 stats

    STAT pid 22459                             进程ID

    STAT uptime 1027046                        服务器运行秒数

    STAT time 1273043062                       服务器当前unix时间戳

    STAT version 1.4.4                         服务器版本

    STAT libevent 2.0.21-stable

    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 reserved_fds 20

    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 touch_hits 0

    STAT touch_misses 0

    STAT auth_cmds 0

    STAT auth_errors 0

    STAT bytes_read 15785                      读取字节总数

    STAT bytes_written 15222                   写入字节总数

    STAT limit_maxbytes 67108864               分配的内存数(字节)

    STAT accepting_conns 1                     目前接受的链接数

    STAT listen_disabled_num 0                

    STAT time_in_listen_disabled_us 0

    STAT threads 4                             线程数

    STAT conn_yields 0

    STAT hash_power_level 16

    STAT hash_bytes 524288

    STAT hash_is_expanding 0

    STAT malloc_fails 0

    STAT conn_yields 0

    STAT bytes 0                               存储item字节数

    STAT curr_items 0                          item个数

    STAT total_items 34                        item总数

    STAT expired_unfetched 0

    STAT evicted_unfetched 0

    STAT evictions 0                           为获取空间删除item的总数

    STAT reclaimed 0

    STAT crawler_reclaimed 0

    STAT crawler_items_checked 0

    STAT lrutail_reflocked 0


     

    stats items 命令
    执行stats items,可以看到STAT items行,如果memcached存储内容很多,那么这里也会列出很多的STAT items行。

    stats slabs命令

     显示各个slab的信息,包括chunk的大小、数目、使用情况等

    flush_all命令

    flush_all 仅用于清理缓存中的所有名称/值对。如果您需要将缓存重置到干净的状态,则 flush_all 能提供很大的用处。

    PHP连接Memcached

    客户端:安装php的memcache扩展(lamp平台)

     memcache在php中编译

    #  wget http://www.lishiming.net/data/attachment/forum/memcache-2.2.3.tgz

    # tar zxvf memcache-2.2.3.tgz

    # cd memcache-2.2.3

    # /usr/local/php/bin/phpize

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

    # make

    # make install

    # cp modules/memcache.so /usr/local/php/ext/   //把memcache.so 拷贝至php的extension_dir下,#查看php extension_dir的方法是  /usr/local/php/bin/php -i |grep extension_dir

    修改扩展路径

    mkdir /usr/local/php/ext

    php.ini中修改:

    extension_dir = "/usr/local/php/ext"

    然后在php.ini 中添加

    extension = memcache.so

    下载测试页面:

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

    或者直接创建测试文件内容如下vim /usr/local/php/bin/1.php

    <?php

    //连接Memcache Memcache

    $mem = new Memcache;

    $mem->connect("192.168.1.105", 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();

    ?>

    切记上面的ip设置服务器端ip。

    /usr/local/php/bin/php 1.php

    [root@localhost bin]# /usr/local/php/bin/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

    )

    <br>Get key1 value: <br>Get key2 value: <br>[root@localhost bin]#

    出现如下结果表示ok。

    或在站点根目录下创建2.php vim /usr/local/apache2//index1.html

    内容如下

    <?php

    $memcache = new Memcache;

    $memcache->connect( '192.168.1.105', 11211 ) or die ( "Could not connect Mc server" );

    $memcache->set ( 'key','wyl wyl' );

    $get= $memcache->get ( 'key' );

    echo $get;

    ?>

    浏览器测试:出现wyl wyl 表示ok。

     


     

     

    Memcached实现session共享

     

    php配置中分为lamp和lnmp 两者的配置是不一样的。在客户端lamp或者lnmpphp配置文件中修改php文件如下:

    第一种:修改php配置文件

    session.save_handler = files

    session.save_path = "/tmp" --》

    session.save_handler = memcache

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

    ip 端口改为memcache服务器ip端口地址即可。在apache 或nginx 站点目录新建测试的php文件

    vim /usr/local/apache2/htdocs/index3.php

    内容随便这里依然用以前的测试文件。

    第二种:针对apache修改httpd.conf中对应的虚拟主机汇总添加

    php_value session.save_handler “memcache”

    php_value session.save_path “tcp://192.168.1.11211”

    第三种:正对php 在php-fpm.conf中对应的pool中添加

    php_value[session.save_handler]=memcache

    php_value[session.save_path] = “tcp://192.168.1.105:11211”

     

    测试1.可在站点配置文件下编写info.php文件

    <?php

    phpinfo();

    ?>

    保存退出。

    curl 192.168.1.220 info.php 用curl 筛选或浏览器访问:

    session.referer_check

    no value

    no value

    session.save_handler

    memcache

    memcache

    session.save_path

    tcp://192.168.1.105:11211

    tcp://192.168.1.105:11211

    session.serialize_handler

    php

    php

    session.upload_progress.cleanup

    On

    On

    session.save_handler和_path显示数据表示ok


     

    测试2.命令测试:

    在站点文件下创建文件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();

    ?>

    写入测试内容

    [root@localhost htdocs]# telnet 192.168.1.105 11211

    Trying 192.168.1.105...

    Connected to 192.168.1.105.

    Escape character is '^]'.

    flush_all

    OK

    [root@localhost ~]# curl 192.168.1.220/session.php

    1479421282<br><br>1479421282<br><br>0onfdgvsgvpuev63k5qn74e993

    [root@localhost htdocs]# telnet 192.168.1.105 11211

    Trying 192.168.1.105...

    Connected to 192.168.1.105.

    Escape character is '^]'.

    flush_all

    OK

    get 0onfdgvsgvpuev63k5qn74e993

    VALUE 0onfdgvsgvpuev63k5qn74e993 0 37

    TEST|i:1479421282;TEST3|i:1479421282;

    END

    Memcached sesson共享存储ok


     

    Memcached 兼容持久化

    MemcachedBD(key-value)

    Tokyo tyrant(key-value)

    持久化软件如:redis,ttserver

  • 相关阅读:
    237. Delete Node in a Linked List
    430. Flatten a Multilevel Doubly Linked List
    707. Design Linked List
    83. Remove Duplicates from Sorted List
    160. Intersection of Two Linked Lists
    426. Convert Binary Search Tree to Sorted Doubly Linked List
    142. Linked List Cycle II
    类之间的关系
    初始化块
    明确类和对象
  • 原文地址:https://www.cnblogs.com/wylhome/p/6076218.html
Copyright © 2011-2022 走看看