Memcached的安装和使用以及nginx整合memcached

时间:2021-06-04 20:41:46

一、模块的安装启动

wget http://cdnetworks-kr-2.d1.sourceforge.net/project/levent/libevent/libevent-2.0/libevent-2.0.10-stable.tar.gz
wget http://nchc.dl.sourceforge.net/project/levent/libevent/libevent-2.0/libevent-2.0.22-stable.tar.gz

libevent
./configure
make
make install

vim /etc/ld.so.conf

/usr/local/libevent-2.0.22/lib/
ldconfig

wget http://memcached.org/files/memcached-1.4.25.tar.gz
小伙伴们FQ吧
tar xvf memcached-1.4.25.tar.gz

http://code.sixapart.com/svn/memcached/trunk/server/doc/protocol.txt 文档

cd /usr/local/memcached-1.4.25/bin/

LD_DEBUG=libs /usr/local/memcached-1.4.25/bin/memcached -v


./memcached -d -m 10 -u nobody ./memcached -d -m 10 -u nobody -p 11212 -U 11213 ./memcached -d -m 10 -u nobody -p 11212 -U 11213 -s /tmp/memcached.socket 套接字路径 ./memcached -d -m 10 -u nobody -p 11212 -U 11213 -l 192.168.3.139 监听的ip地址

-p TCP监听端口; -U UDP监听端口;-s 指定Unix套接字的路径; -a Unix套接字的掩码;-l 指定监听的网络端口;
-d 作为守护进程; -r 内核文件的最大值限制; -u 指定的用户运行; -m 缓存条目的最大内存值; -M在内存耗尽时返回错误(而不是删除缓存条目); -c 限制同时的最大连接数;-k 锁定所有分页内存; -v 详细模式; -vv 非常详细的模式; -vvv极其详细的模式; -h打印帮助并退出; -i 打印Memcached和libevent许可; -P 指定保存PID文件的路径及文件名; -f 设置块大小的增长因子; -n 指定分配给key+value+flags的最小空间; -L尽量使用最大内存页; -D指定分隔符; -t使用的线程数; -R 通过该参数来设定限制值; -C禁止使用CAS; -b设置等待(积压)队列的限制; -B 设置绑定的协议; -I 设定每一个块页的大小;

[root@CDN03 bin]# ps -ef | grep memcached
nobody 20524 1 0 19:34 ? 00:00:00 ./memcached -d -m 10 -u nobody -p 11212 -U 11213
root 20531 9071 0 19:34 pts/0 00:00:00 grep memcached
[root@CDN03 bin]# lsof -p 20524
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
memcached 20524 nobody cwd DIR 8,3 4096 2 /


二、其他模块的安装

测试 telnet 192.168.15.134 11211
(1)damemtop
perl 模块:perl Makefile.PL; make ; make install;
AnyEvent http://search.cpan.org/dist/AnyEvent/lib/AnyEvent.pm
http://www.cpan.org/authors/id/M/ML/MLEHMANN/AnyEvent-7.11.tar.gz

YAML http://www.cpan.org/modules/by-module/YAML/
http://www.cpan.org/modules/by-module/YAML/YAML-1.15.tar.gz

TermReadKey http://pkgs.repoforge.org/perl-TermReadKey/

cp damemtop.yaml /etc/

(2)memcached-init start-memcached

start-stop-daemon http://developer.axis.com/download/distribution/apps-sys-utils-start-stop-daemon-IR1_9_18-2.tar.gz
gcc start-stop-daemon.c -o start-stop-daemon
cp start-stop-daemon /bin/

(3)memcached.sysv
718 cp memcached.sysv /etc/init.d/memcached_sysv
719 chkconfig --list | grep memcached_sysv
720 chkconfig --add | grep memcached_sysv
721 chkconfig --add memcached_sysv
722 chkconfig --list | grep memcached_sysv
723 chkconfig --level 35 memcached_sysv on
724 chkconfig --list | grep memcached_sysv

(4)memcached-tool
735 ./memcached-tool 127.0.0.1:11211 display
736 ./memcached-tool 127.0.0.1:11211
737 ./memcached-tool 127.0.0.1:11211 stats
738 ./memcached-tool 127.0.0.1:11211 dump

 

三 、操作方法
<command name> <key> <flags> <exiptme> <bytes> [noreply]\r\n

cas <key> <flags> <exptime> <bytes> <cas unique> [noreply]\r\n

set存储指定数据;
add在没有该<key>的情况下存储数据;
replace在有该<key>的情况下存储数据;
append追加数据到尾部;
prepend追加数据到首部;
incr/decr 增加或减少某值

set a 36 0 5
12345

get a

add a 36 0 5
abcde

delete a

stats

stats slabs

stats items

flush_all //缓存刷新失效

flush_all 120 //120秒后缓存刷新失效

incr a 11 //增加或减少某值,不能对非数字的value操作
decr a 11

 

四、统计

stats items
STAT items:1:number 6
STAT items:1:age 1161
STAT items:1:evicted 0
STAT items:1:evicted_nonzero 0
STAT items:1:evicted_time 0
STAT items:1:outofmemory 0
STAT items:1:tailrepairs 0
STAT items:1:reclaimed 0
STAT items:1:expired_unfetched 0
STAT items:1:evicted_unfetched 0
STAT items:1:crawler_reclaimed 0
STAT items:1:crawler_items_checked 0
STAT items:1:lrutail_reflocked 0

number 目录在这个类型存储下的条目
age 在算法LRU下, 最老条目经历的时间;
evicted 在生存期满之前,才算法LRU中一个条目不得不被驱赶出缓存的次数;
outofmemory: 该slabclass不能够存储新条目的次数。这种情况一般出现在启动Memcached服务器时使用了-M参数,或是在清楚条目时失败所致。

stats sizes
STAT 96 7
STAT <条目大小> <条目数量>

 

五、nginx的编译
yum install -y zlib-devel gcc gcc-c++
编译nginx(略)
nginx的配置如下:

    server {
        location / {
            set $memcached_key $uri;
            memcached_pass 127.0.0.1:11211;
            memcached_buffer_size 16k;
            memcached_read_timeout 30000;
            memcached_send_timeout 30000;
            default_type text/html;
            #error_page 404 @fallback;
        }

        location @fallback {
            proxy_pass http://192.168.3.139:8080;
        }
 }