为了账号安全,请及时绑定邮箱和手机立即绑定

memcached安装配置

标签:
PHP

memcached:缓存服务器,但本身无法决定缓存任何数据
    一半依赖客户端,一半依赖于服务器
    set key 5 60 hello
    清理机制:lazy:惰性, LRU,最近最少使用
    内存缓存服务器
        最小48bytes
        最大1M
buddy system:伙伴系统
    避免内存外碎片,内存页面和页面之间的碎片
slab allocator:slab 分离器
    避免内存内碎片,专门事先为每一种数据结构把几个内存页面分成n个小的页面来存储小的数据。
memcached:不通信分布式缓存服务器
http://www.memcached.org/
event-libevent 提供事件驱动

[root@localhost memcached-1.4.35]# yum -y install cyrus-sasl-devel

[root@localhost ~]# tar -xf libevent-2.0.20-stable.tar.gz 

[root@localhost libevent-2.0.20-stable]# ./configure  --prefix=/usr/local/libevent

[root@localhost libevent-2.0.20-stable]# make && make install


[root@localhost ~]# tar -xf memcached-1.4.35.tar.gz 

[root@localhost memcached-1.4.35]# yum -y install cyrus-sasl-devel.i686

[root@localhost memcached-1.4.35]#  ./configure --enable-sasl  --prefix=/usr/local/memcached  --with-libevent=/usr/local/libevent

[root@localhost libevent-2.0.20-stable]# make && make install



[root@localhost ~]# /usr/local/memcached/bin/memcached  -h

memcached的常用选项说明

-l <ip_addr>:指定进程监听的地址;

-d: 以服务模式运行;

-u <username>:以指定的用户身份运行memcached进程;

-m <num>:用于缓存数据的最大内存空间,单位为MB,默认为64MB;

-c <num>:最大支持的并发连接数,默认为1024;

-p <num>: 指定监听的TCP端口,默认为11211;

-U <num>:指定监听的UDP端口,默认为11211,0表示关闭UDP端口;

-t <threads>:用于处理入站请求的最大线程数,仅在memcached编译时开启了支持线程才有效;

-f <num>:设定Slab Allocator定义预先分配内存空间大小固定的块时使用的增长因子;

-M:当内存空间不够使用时返回错误信息,而不是按LRU算法利用空间;

-n: 指定最小的slab chunk大小;单位是字节;设定最小的大小空间

-S: 启用sasl进行用户认证;



[root@localhost ~]# /usr/local/memcached/bin/memcached   -m 128 -n 20 -f 1.25 -vv -u nobody -d

指定最大内存空间128M, 指定最小的slab chunk为20字节,指定增长因子为1.25  -d后台运行

slab class   1: chunk size        72 perslab   14563

 第一次为72字节 一共有14563个


[root@localhost ~]# netstat -tnulp |grep mem

tcp        0      0 0.0.0.0:11211               0.0.0.0:*                   LISTEN      1628/memcached      

tcp        0      0 :::11211                    :::*                        LISTEN      1628/memcached      

udp        0      0 0.0.0.0:11211               0.0.0.0:*                               1628/memcached      

udp        0      0 :::11211                    :::*                                    1628/memcached  


[root@localhost ~]# yum -y install telnet

[root@localhost ~]# telnet localhost 11211

<36 stats 显示当前状态

   STAT get_hits 0  get命中率

   STAT get_misses 0  get未命中率


add命令:添加一个新键

add keyname flag()  timeout(超时时间)  datasize(数据大小)

如:

add mykey 1 10 12

hello world!

---------------------

add mykey 0  60  5    

<36 add mykey 0  60  5

hello 

>36 STORED

STORED

get mykey

<36 get mykey

>36 sending key mykey

>36 END

VALUE mykey 0 5

hello

END

---------------------


get命令:

get keyname

如: get mykey

VALUE mykey 0 12

Hello world!

END

 

基本命令
 get 读取一个键  get mykey
 set 设定一个键  set mykey 0 60 5
 add 创建一个键  add newkey 0 60 5
 replace  替换一个现有键的值  replace key 0 60 5
 append   在一个键后面新增一个值 append key 0 60 15
 prepend  在已存在的键的前面新增一个值 prepend 0 60 15
 incr     让某些值自动+1,相当于I++   incr mykey 2
 decr     让某些值自动-1,相当于I--   decr mykey 5
 delete   删除某个键                  delete mykey
 flush_all  清除所有键                flush_all
                                      flush_all900
 stats    显示状态,可以只显示某一个状态
    stats
    stats slabs
    stats malloc
    stats items
    stats detail
    stats sizes
    stats reset
 version 显示版本
 verbosity 提升日志级别
 quit 退出
 
查看信息中的关键字中英文对照表
pid     memcache服务器的进程ID
uptime  服务器已经运行的秒数
time    服务器当前的unix时间戳
version       memcache版本
pointer_size  当前操作系统的指针大小(32位系统一般是32bit)
rusage_user   进程的累积用户时间
rusage_system 进程的累积系统时间
curr_items    服务器当前存储的item数量
total_items   从服务器启动以后存储的items总量
bytes         当前服务器存储items占用的字节数
curr_connections 当前打开着的连接数
total_connections 从服务器启动以后曾经打开过的连接数
cmd_get   get命令(获取)总请求次数
cmd_set   set命令(保存)总请求次数
get_hits  总命中次数
get_misses 总未命中次数
evictions 为获取空闲内存而删除的items数(分配给mamcache)的空间用满意后需要删除旧的items来得到空间分配给新的items
limit_maxbytes 分配给memcache的内存大小(字节)
threads当前线程数



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


#!/bin/bash

#

# Init file for memcached

#

# chkconfig: - 86 14

# description: Distributed memory caching daemon

#

# processname: memcached

# config: /etc/sysconfig/memcached


. /etc/rc.d/init.d/functions


## Default variables

PORT="11211"

USER="nobody"

MAXCONN="1024"

CACHESIZE="64"

OPTIONS=""


##用于判断脚本的配置文件。

[ -f /etc/sysconfig/memcached ] && . /etc/sysconfig/memcached 


RETVAL=0

prog="/usr/local/memcached/bin/memcached"

desc="Distributed memory caching"

lockfile="/var/lock/subsys/memcached"


start() {

        echo -n $"Starting $desc (memcached): "

        daemon $prog -d -p $PORT -u $USER -c $MAXCONN -m $CACHESIZE $OPTIONS

        RETVAL=$?

        echo

        [ $RETVAL -eq 0 ] && touch $lockfile

        return $RETVAL

}


stop() {

        echo -n $"Shutting down $desc (memcached): "

        killproc $prog

        RETVAL=$?

        echo

        [ $RETVAL -eq 0 ] && rm -f $lockfile

        return $RETVAL

}


restart() {

        stop

        start

}


reload() {

        echo -n $"Reloading $desc ($prog): "

        killproc $prog -HUP

        RETVAL=$?

        echo

        return $RETVAL

}


case "$1" in

  start)

        start

        ;;

  stop)

        stop

        ;;

  restart)

        restart

        ;;

  condrestart)

        [ -e $lockfile ] && restart

        RETVAL=$?

        ;;       

  reload)

        reload

        ;;

  status)

        status $prog

        RETVAL=$?

        ;;

   *)

        echo $"Usage: $0 {start|stop|restart|condrestart|status}"

        RETVAL=1

esac


exit $RETVAL

----------------------------------------

[root@localhost ~]# chmod +x /etc/init.d/memcached 

[root@localhost ~]# chkconfig --add memcached

[root@localhost ~]# chkconfig memcached on

[root@localhost ~]# 

[root@localhost ~]# chkconfig list |grep mem

[root@localhost ~]# chkconfig --list |grep mem

memcached      0:off1:off2:on3:on4:on5:on6:off

[root@localhost ~]# service memcached start

Starting Distributed memory caching (memcached):           [  OK  ]

/etc/init.d/memcached: line 84: exit: 0#!/bin/bash: numeric argument required

[root@localhost ~]# 

给脚本提供配置文件

[root@localhost sysconfig]# vim /etc/sysconfig/memcached

PORT="11211"

USER="nobody"

MAXCONN="1024"

CACHESIZE="180"

OPTIONS=""

----------------

[root@localhost sysconfig]# service memcached restart

[root@localhost sysconfig]# telnet localhost 11211

stats

STAT limit_maxbytes 188743680

-------------------------------------------  

安装Memcache的PHP扩展

 location / {

            root   /web/htdocs;

            index  index.php index.html;

         }


nginx开启php功能

       location ~ \.php$ {

            root           /web/htdocs;

            fastcgi_pass   127.0.0.1:9000;

            fastcgi_index  index.php;

            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;

            include        fastcgi_params;

        }

[root@localhost nginx]# service nginx reload

[root@localhost nginx]# vim /web/htdocs/index.php

<h1>Test Page </h1>

<?php

phpinfo();

?>



①安装PHP的memcache扩展


# tar xf memcache-2.2.6.tgz

# cd memcache-2.2.6

[root@localhost memcache-2.2.6]# /usr/local/php/bin/phpize

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

# make && make install


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


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


[root@localhost memcache-2.2.6]# mkdir /etc/php.d

[root@localhost memcache-2.2.6]# vim /etc/php.d/memcache.ini

extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/memcache.so


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

<?php

$mem = new Memcache;

$mem->connect("127.0.0.1", 11211)  or die("Could not connect");


$version = $mem->getVersion();

echo "Server's version: ".$version."<br/>\n";


$mem->set('testkey', 'Hello World', 0, 600) or die("Failed to save data at the memcached server");

echo "Store data in the cache (data will expire in 600 seconds)<br/>\n";


$get_result = $mem->get('testkey');

echo "$get_result is from memcached server.";         

?>


http://192.168.3.239/test.php

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

[root@localhost memcached-1.4.35]# telnet localhost 11211

Trying ::1...

Connected to localhost.

Escape character is '^]'.

get testkey

VALUE testkey 0 11

Hello World

END





使用libmemcached的客户端工具:


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


1) 编译安装libmemcached


# tar xf libmemcached-1.0.2.tar.gz 

# cd libmemcached-1.0.2

# ./configure 

# make && make install

# ldconfig


2) 客户端工具

# memcat --servers=127.0.0.1:11211 mykey

# memping 

# memslap

# memstat



Nginx整合memcached:


server {

        listen       80;

        server_name  www.mylinux.com;


        #charset koi8-r;


        #access_log  logs/host.access.log  main;


        location / {

                set $memcached_key $uri;

                memcached_pass     127.0.0.1:11211;

                default_type       text/html;

                error_page         404 @fallback;

        }


        location @fallback {

                proxy_pass http://172.16.0.1;  ##后端服务器

        }

}



LVS Web php session memcached

前提:

1、配置各php支持使用memcache;

2、安装配置好memcached服务器,这里假设其地址为172.16.200.11,端口为11211;



一、配置php将会话保存至memcached中


编辑php.ini文件,确保如下两个参数的值分别如下所示:

[root@localhost ~]# vim /etc/php.ini 

session.save_handler = memcache

session.save_path = "tcp://172.16.200.11:11211?persistent=1&weight=1&timeout=1&retry_interval=15"

[root@localhost ~]# service php-fpm restart

二、测试


新建php页面setsess.php,为客户端设置启用session:

[root@localhost ~]# vim /usr/html/setsees.php

<?php

session_start();

if (!isset($_SESSION['mylinux.com'])) {

  $_SESSION['www.mylinux.com'] = time();

}

print $_SESSION['www.mylinux.com'];

print "<br><br>";

print "Session ID: " . session_id();

?>


新建php页面showsess.php,获取当前用户的会话ID:

[root@localhost ~]# vim /usr/html/showsess.php

<?php

session_start();

$memcache_obj = new Memcache;

$memcache_obj->connect('172.16.200.11', 11211);

$mysess=session_id();

var_dump($memcache_obj->get($mysess));

$memcache_obj->close();

?>









<?php 

// Generating cookies must take place before any HTML. 

// Check for existing "SessionId" cookie 

$session = $HTTP_COOKIE_VARS["SessionId"]; 

if ( $session == "" ) { 

// Generate time-based unique id. 

// Use user's IP address to make more unique. 

$session = uniqid ( getenv ( "REMOTE_ADDR" ) ); 

// Send session id - expires when browser exits 

SetCookie ( "SessionId", $session ); 

?> 

<HTML> 

<HEAD><TITLE>Session Test</TITLE></HEAD> 

<BODY> <br> 16 Current session id: <?php echo $session ?> 

</BODY></HTML>

memadmin-master 的安装

[root@localhost ~]# mv memadmin-master   /usr/html/mmaster

[root@localhost mmaster]# vim config.php #可以修改memadmin的登录密码

http://192.168.3.239/mmaster


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消