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

  • 相关阅读:
    asp.net连接SQL server,SQLLite,Oracle,Access数据库
    c#中RadioButtonList选中后不整体刷新页面保持选中状态
    c#中onclick事件请求的两种区别
    java中从实体类中取值会忽略的的问题
    Groovy自定义函数实现时间表达式解析
    广度优先搜索、狄克丝特拉算法
    创建型模式
    数组、链表、散列表、图、树、队列、栈
    nginx.conf
    Nginx笔记一
  • 原文地址:https://www.cnblogs.com/wylhome/p/6076218.html
Copyright © 2011-2022 走看看