zoukankan      html  css  js  c++  java
  • 使用memcache的session入库

    使用memcache的session入库


    Memcached是一款开源、高性能、分布式内存对象缓存系统,可应用各种需要缓存的场景,其主要目的是通过降低对Database的访问来加速web应用程序。它是一个基于内存的”键值对”存储,用于存储数据库调用、API调用或页面引用结果的直接数据,如字符串、对象等。

    memcached是以LiveJournal旗下Danga Interactive 公司的Brad Fitzpatric 为首开发的一款软件。现在已成为mixi、hatena、Facebook、Vox、LiveJournal等众多服务中提高Web应用扩展性的重要因素。

    Memcached是一款开发工具,它既不是一个代码加速器,也不是数据库中间件。其设计哲学思想主要反映在如下方面:

    1. 简单key/value存储:服务器不关心数据本身的意义及结构,只要是可序列化数据即可。存储项由“键、过期时间、可选的标志及数据”四个部分组成;
    2. 功能的实现一半依赖于客户端,一半基于服务器端:客户负责发送存储项至服务器端、从服务端获取数据以及无法连接至服务器时采用相应的动作;服务端负责接收、存储数据,并负责数据项的超时过期;
    3. 各服务器间彼此无视:不在服务器间进行数据同步;
    4. O(1)的执行效率
    5. 清理超期数据:默认情况下,Memcached是一个LRU缓存,同时,它按事先预订的时长清理超期数据;但事实上,memcached不会删除任何已缓存数据,只是在其过期之后不再为客户所见;而且,memcached也不会真正按期限清理缓存,而仅是当get命令到达时检查其时长;

    Memcached提供了为数不多的几个命令来完成与服务器端的交互,这些命令基于memcached的协议实现。

    存储类命令:set, add, replace, append, prepend

    获取数据类命令:get, delete, incr/decr

    统计类命令:stats, stats items, stats slabs, stats sizes

    清理命令: flush_all

    一、安装libevent

    memcached依赖于libevent API,因此要事先安装之,项目主页:http://libevent.org/,可自行选择需要的版本下载。本文采用的是目前最新版本的源码包libevent-2.0.16-stable.tar.gz。安装过程:

    1. # tar xf libevent-2.0.20-stable.tar.gz
    2. # cd libevent-2.0.20
    3. # ./configure --prefix=/usr/local/libevent
    4. # make && make install
    5. # echo "/usr/local/libevent/lib" > /etc/ld.so.conf.d/libevent.conf
    6. # ldconfig

    二、安装配置memcached,也可以使用rpm包安装,可以开启安全的验证 sasl

    1、安装memcached

    1. # tar xf memcached-1.4.15.tar.gz
    2. # cd memcached-1.4.15
    3. # ./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent
    4. # make && make install
    5. 注意事项:
    6. items.c: In function crawler_crawl_q’:
    7. items.c:1141: warning: comparison is always true due to limited range of data type
    8. make[2]: *** [memcached_debug-items.o] Error 1
    9. make[2]: Leaving directory `/usr/local/src/memcached-1.4.24'
    10. make[1]: *** [all-recursive] Error 1
    11. make[1]: Leaving directory `/usr/local/src/memcached-1.4.24'
    12. make: *** [all] Error 2
    13. 解决方案:编辑Makefile文件,删除文件中的 " -Werror ",保存后即可

    2、memcached SysV的startup脚本代码如下所示,将其建立为/etc/init.d/memcached文件:

    1. #!/bin/bash
    2. #
    3. # Init file for memcached
    4. #
    5. # chkconfig: - 86 14
    6. # description: Distributed memory caching daemon
    7. #
    8. # processname: memcached
    9. # config: /etc/sysconfig/memcached
    10. . /etc/rc.d/init.d/functions
    11. ## Default variables
    12. PORT="11211"
    13. USER="nobody"
    14. MAXCONN="1024"
    15. CACHESIZE="64"
    16. OPTIONS=""
    17. # Add memcache configure
    18. [ -f /etc/sysconfig/memcachd ] && . /etc/sysconfig/memcached
    19. RETVAL=0
    20. prog="/usr/local/memcached/bin/memcached"
    21. desc="Distributed memory caching"
    22. lockfile="/var/lock/subsys/memcached"
    23. start() {
    24. echo -n $"Starting $desc (memcached): "
    25. daemon $prog -d -p $PORT -u $USER -c $MAXCONN -m $CACHESIZE $OPTIONS
    26. RETVAL=$?
    27. echo
    28. [ $RETVAL -eq 0 ] && touch $lockfile
    29. return $RETVAL
    30. }
    31. stop() {
    32. echo -n $"Shutting down $desc (memcached): "
    33. killproc $prog
    34. RETVAL=$?
    35. echo
    36. [ $RETVAL -eq 0 ] && rm -f $lockfile
    37. return $RETVAL
    38. }
    39. restart() {
    40. stop
    41. start
    42. }
    43. reload() {
    44. echo -n $"Reloading $desc ($prog): "
    45. killproc $prog -HUP
    46. RETVAL=$?
    47. echo
    48. return $RETVAL
    49. }
    50. case "$1" in
    51. start)
    52. start
    53. ;;
    54. stop)
    55. stop
    56. ;;
    57. restart)
    58. restart
    59. ;;
    60. condrestart)
    61. [ -e $lockfile ] && restart
    62. RETVAL=$?
    63. ;;
    64. reload)
    65. reload
    66. ;;
    67. status)
    68. status $prog
    69. RETVAL=$?
    70. ;;
    71. *)
    72. echo $"Usage: $0 {start|stop|restart|condrestart|status}"
    73. RETVAL=1
    74. esac
    75. exit $RETVAL

    使用如下命令配置memcached成为系统服务:

    1. # chmod +x /etc/init.d/memcached
    2. # chkconfig --add memcached
    3. # service memcached start

    3、使用telnet命令测试memcached的使用

    Memcached提供一组基本命令用于基于命令行调用其服务或查看服务器状态等。

    1. # telnet 127.0.0.1 11211

    add命令:

    add keyname flag timeout datasize

    如:

    1. add mykey 0 10 12
    2. Hello world!

    get命令:

    1. get keyname
    2. 如:get mykey
    3. VALUE mykey 0 12
    4. Hello world!
    5. END

    可以telnet 后使用stats 查看使用内存

    4、memcached的常用选项说明

    1. -l <ip_addr>:指定进程监听的地址,当有多个网卡的时候;
    2. -d: 以服务模式运行;
    3. -u <username>:以指定的用户身份运行memcached进程;
    4. -m <num>:用于缓存数据的最大内存空间,单位为MB,默认为64MB
    5. -c <num>:最大支持的并发连接数,默认为1024
    6. -p <num>: 指定监听的TCP端口,默认为11211
    7. -U <num>:指定监听的UDP端口,默认为112110表示关闭UDP端口;
    8. -t <threads>:用于处理入站请求的最大线程数,仅在memcached编译时开启了支持线程才有效;
    9. -f <num>:设定Slab Allocator定义预先分配内存空间大小固定的块时使用的增长因子;
    10. -M:当内存空间不够使用时返回错误信息,而不是按LRU算法利用空间;
    11. -n: 指定最小的slab chunk大小;单位是字节;
    12. -S: 启用sasl进行用户认证;

    三、安装Memcache的PHP扩展

    ①安装PHP的memcache扩展

    1. # tar xf memcache-2.2.5.tgz
    2. # cd memcache-2.2.5
    3. /usr/local/php/bin/phpize
    4. # ./configure --with-php-config=/usr/local/php/bin/php-config --with-memcache
    5. # make && make install

    上述安装完后会有类似以下的提示:

    Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/

    ②编辑/usr/local/php/lib/php.ini,在“动态模块”相关的位置添加如下一行来载入memcache扩展: 
    extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/memcache.so

    而后对memcached功能进行测试,在网站目录中建立测试页面test.php,添加如下内容:

    1. <?php
    2. $mem = new Memcache;
    3. $mem->connect("127.0.0.1", 11211) or die("Could not connect");
    4. $version = $mem->getVersion();
    5. echo "Server's version: ".$version."<br/> ";
    6. $mem->set('testkey', 'Hello World', 0, 600) or die("Failed to save data at the memcached server");
    7. echo "Store data in the cache (data will expire in 600 seconds)<br/> ";
    8. $get_result = $mem->get('testkey');
    9. echo "$get_result is from memcached server.";
    10. ?>

    如果有输出“Hello World is from memcached.”等信息,则表明memcache已经能够正常工作。

    四、使用libmemcached的客户端工具:

    访问memcached的传统方法是使用基于perl语言开发的Cache::memcached模块,这个模块在大多数perl代码中都能良好的工作,但也有着众所周知的性能方面的问题。libMemcached则是基于C语言开发的开源的C/C++代码访问memcached的库文件,同时,它还提供了数个可以远程使用的memcached管理工具,如memcat, memping,memstat,memslap等。

    1) 编译安装libmemcached

    1. # tar xf libmemcached-1.0.2.tar.gz
    2. # cd libmemcached-1.0.2
    3. # ./configure
    4. # make && make install
    5. # ldconfig

    2) 客户端工具

    1. # memcat --servers=127.0.0.1:11211 mykey
    2. # memping
    3. # memslap
    4. # memstat

    3) 基于web界面的管理 memadmin

    五、将session回话信息保存到memcache里面

      1. 更改PHP的配置文件php.ini,增加如下配置信息

        1. session.save_handler = memcache
        2. session.save_path ="tcp://127.0.0.1:11211"

    (文章转自 superve.leanote.com/post/memcache保存session数据 )

  • 相关阅读:
    Bit Manipulation
    218. The Skyline Problem
    Template : Two Pointers & Hash -> String process
    239. Sliding Window Maximum
    159. Longest Substring with At Most Two Distinct Characters
    3. Longest Substring Without Repeating Characters
    137. Single Number II
    142. Linked List Cycle II
    41. First Missing Positive
    260. Single Number III
  • 原文地址:https://www.cnblogs.com/Sillynoob/p/4855262.html
Copyright © 2011-2022 走看看