设为首页 收藏本站
查看: 1265|回复: 0

[经验分享] Memcached的安装和使用

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-12-25 09:26:23 | 显示全部楼层 |阅读模式
一、简介

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

二、下载相关包

1
2
# wget http://nchc.dl.sourceforge.net/p ... .0.22-stable.tar.gz                    ##网络库,memcached所依赖的异步事件通知库
# wget http://memcached.org/files/memcached-1.4.25.tar.gz




三、编译安装memcached
①编译libevent
1
2
3
4
# tar -zxvf libevent-2.0.22-stable.tar.gz
# cd libevent-2.0.22-stable
# ./configure --prefix=/usr/local/libevent
# make & make install




②编译memcached

1
2
3
4
# tar -zxvf memcached-1.4.25.tar.gz
# cd memcached-1.4.25
# ./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent
# make & make install




四、配置启用memcached

①配置memcached脚本启动
1
2
3
4
5
6
7
# cp memcached-1.4.25/scripts/memcached.sysv /etc/init.d/memcached
# vi /etc/init.d/memcached
prog="/usr/local/memcached/bin/memcached"        ##更改该处的memcached路径
daemon $prog -d -p $PORT -u $USER  -m $CACHESIZE -c $MAXCONN -P /var/run/memcached/memcached.pid $OPTIONS              ##将memcached改为$prog,也可改为具体路径
# systemctl daemon-reload        ##重启所有守护进程
# systemctl start memcached
# ss -tlnp




②直接使用命令启动

1
2
3
# /usr/local/bin/memcached -d -m 128 -u root -p 11211 -c 256 -P /var/run/memcached.pid                                                                     ##启动memcached
# ss -tlnp
# kill `cat /var/run/memcached.pid`                              ##关闭memcached



memcached常用选项说明:
-d:启动一个守护进程
-m:用于缓存数据的最大内存空间(单位MB,默认64M)
-u:指定运行memcached的用户
-l:指定进程监听的IP地址(默认监听所有网卡)
-p:设置memcached的TCP监听端口(默认11211)
-U:指定监听的UDP端口(默认为11211,0表示关闭UDP端口)
-c:最大支持的并发连接数(默认1024)
-P:设置保存memcached的Pid文件
-t:用于处理入站请求的最大线程数,仅在memcached编译时开启了支持线程才有效
-f:设定Slab Allocator定义预先分配内存空间大小固定的块时使用的增长因子
-M:当内存空间不够使用时返回错误信息,而不是按LRU算法利用空间
-n:指定最小的slab chunk大小(单位是字节)
-S:启用sasl进行用户认证

③测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# telnet 127.0.0.1 11211           ##测试memcached
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
stats                         ##查看memcached状态
STAT pid 11808                       ##进程ID
STAT uptime 1008                     ##服务器已运行秒数
STAT time 1449555354                  ##服务器当前Unix时间戳
STAT version 1.4.25                   ##memcached版本
STAT libevent 2.0.22-stable            ##libevent版本
STAT pointer_size 64                     ##服务器为64位
STAT rusage_user 0.007571              ##进程累计用户时间
STAT rusage_system 0.045427                ##进程累计系统时间
STAT curr_connections 10                 ##当前连接数量
STAT total_connections 11                  ##Memcached运行以来连接总数
STAT connection_structures 11             ##Memcached分配的连接结构数量
STAT reserved_fds 20                       ##内部使用的FD数
STAT cmd_get 0                         ##get命令请求次数
STAT cmd_set 0                         ##set命令请求次数
STAT cmd_flush 0                        ##flush命令请求次数
STAT cmd_touch 0                      ##touch命令请求次数
STAT get_hits 0                          ##get命令命中次数
STAT get_misses 0                      ##get命令未命中次数
STAT delete_misses 0                    ##delete命令未命中次数
STAT delete_hits 0                       ##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                       ##touch命令命中次数
STAT touch_misses 0                   ##touch命令未命中次数
STAT auth_cmds 0                       ##认证命令处理的次数
STAT auth_errors 0                       ##认证失败数目
STAT bytes_read 15                      ##读取总字节数
STAT bytes_written 7                     ##发送总字节数
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                ##hash表等级
STAT hash_bytes 524288                    ##当前hash表大小
STAT hash_is_expanding 0                ##hash表正在扩展
STAT malloc_fails 0
STAT bytes 0                             ##当前存储占用的字节数
STAT curr_items 0                     ##当前存储的数据总数
STAT total_items 0                      ##启动以来存储的数据总数
STAT expired_unfetched 0              ##已过期但未获取的对象数目
STAT evicted_unfetched 0                ##已驱逐但未获取的对象数目
STAT evictions 0                        ##LRU释放的对象数目
STAT reclaimed 0                         ##已过期的数据条目来存储新数据的数目
STAT crawler_reclaimed 0
STAT crawler_items_checked 0
STAT lrutail_reflocked 0
END




④memcached命令
set:向缓存添加新的键值对.如果键已经存在,则之前的值将被替换

add:仅当缓存中不存在键时,add 命令才会向缓存中添加一个键值对。
如果缓存中已经存在键,则之前的值将仍然保持相同,并且您将获得响应NOT_STORED

replace:仅当键已经存在时,replace 命令才会替换缓存中的键。
如果缓存中不存在键,那么您将从memcached服务器接受到一条NOT_STORED响应

get:用于检索与之前添加的键值对相关的值

delete:用于删除memcached中的任何现有值。您将使用一个键调用delete ,如果该键存在于缓存中,则删除该值.如果不存在,则返回一条NOT_FOUND消息

gets:功能类似于基本的get命令。两个命令之间的差异在于,gets返回的信息稍微多一些:64 位的整型值非常像名称/值对的 “版本” 标识符

语法如下:
command <key> <flags> <expiration time> <bytes> <value>

参数                   用法
key              key用于查找缓存值
flags            可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息
expiration time  在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)
bytes            在缓存中存储的字节点
value            存储的值(始终位于第二行)

缓存管理命令
stats:转储所连接的memcached实例的当前统计数据
flush_all:清理缓存中的所有名称/值对

五、安装memcached的PHP扩展

①下载相应程序

1
2
3
4
# yum -y install gcc gcc-c++ autoconf automake libtool flex bison  libxml2-devel gd-devel libmcrypt-devel libcurl-devel openssl-devel
# wget http://cn2.php.net/distributions/php-5.6.16.tar.gz  
# wget http://nginx.org/download/nginx-1.9.7.tar.gz
# wget http://pecl.php.net/get/memcache-3.0.8.tgz




②安装

a.编译PHP
1
2
3
4
5
6
7
8
# tar -zxvf php-5.6.16.tar.gz
# cd php-5.6.16
# ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-fpm --enable-shared --with-libxml-dir --with-gd --with-openssl --enable-mbstring --with-mcrypt --with-mysqli --with-mysql --enable-mysqlnd --enable-zip --with-zlib-dir --with-pdo-mysql --with-jpeg-dir --with-freetype-dir --with-curl
# make
# make install
# cp php.ini-production /usr/local/php/etc/php.ini       ##复制php.ini配置文件
# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
# cp sapi/fpm/php-fpm.service /etc/init.d/     ##复制php-fpm启动脚本




b.编译memcache
1
2
3
4
5
6
7
# tar -zxvf memcache-3.0.8.tgz
# cd memcache-3.0.8
# /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-20131226/




c.配置PHP以支持扩展模块
编辑/usr/local/php/etc/php.ini,在“动态模块”相关的位置添加如下:
1
2
3
# vi /usr/local/php/etc/php.ini
736 ; extension_dir = "ext"
737 extension = /usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/memcache.so




d.编译nginx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# groupadd -r nginx
# useradd -r -g nginx nginx
# tar -zxvf nginx-1.9.7.tar.gz
# cd nginx-1.9.7
./configure \
  --prefix=/usr \
  --sbin-path=/usr/sbin/nginx \
  --conf-path=/etc/nginx/nginx.conf \
  --error-log-path=/var/log/nginx/error.log \
  --http-log-path=/var/log/nginx/access.log \
  --user=nginx \
  --group=nginx \
  --with-http_ssl_module \
  --with-http_gzip_static_module \
  --with-pcre
# make
# make install




f.配置nginx启用PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# /etc/nginx/nginx.conf         
server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm index.php;
        }
location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            include        fastcgi.conf;
        }




③测试memcached

a.新建测试页
1
2
3
4
5
6
7
8
9
10
11
# vi /usr/html/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('newkey', '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('newkey');
echo "$get_result is from memcached server.";
?>




b.启用相关程序并查看
1
2
3
4
# systemctl start php-fpm
# /usr/sbin/nginx
# systemctl start memcached
# ss -tlnp



wKiom1Zn3PmByu0kAABOzfHQm90598.jpg

六、配置PHP使用memcached
①配置php.ini
1
2
3
4
5
6
7
# vi /usr/local/php/etc/php.ini
1385 [Session]
1386 ; Handler used to store/retrieve data.
1387 ; http://php.net/session.save-handler
1388 ;session.save_handler = files
1389 session.save_handler = memcache
1390 session.save_path = "tcp://127.0.0.1:11211"





②新建PHP页面,为客户端设置启用session

1
2
3
4
5
6
7
8
9
10
# vi /usr/html/set.php
<?php
session_start();
if (!isset($_SESSION['www.zhi.com'])) {
  $_SESSION['www.zhi.com'] = time();
}
print $_SESSION['www.zhi.com'];
print "<br><br>";
print "Session ID: " . session_id();
?>




③新建PHP页面以获取当前用户会话ID
1
2
3
4
5
6
7
8
9
# vi /usr/html/get.php
<?php
session_start();
$memcache_obj = new Memcache;
$memcache_obj->connect('127.0.0.1', 11211);
$session=session_id();
var_dump($memcache_obj->get($session));
$memcache_obj->close();
?>




④测试
a.输入http://localhost/set.php查看
wKiom1Zn7FPBhCcAAABRaRLDQfk565.jpg

b.输入http://localhost/get.php查看
wKioL1Zn7O6S1gWPAABMF4NuLio960.jpg

七、使用memadmin管理memcached
①简介
MemAdmin是一款可视化的Memcached管理与监控工具,使用PHP开发,体积小,操作简单。
主要功能:
a.服务器参数监控:STATS、SETTINGS、ITEMS、SLABS、SIZES实时刷新

b.服务器性能监控:GET、DELETE、INCR、DECR、CAS等常用操作命中率实时监控
c.支持数据遍历,方便对存储内容进行监视
d.支持条件查询,筛选出满足条件的KEY或VALUE
e.数组、JSON等序列化字符反序列显示
f.兼容memcache协议的其他服务,如Tokyo Tyrant (遍历功能除外)
g.支持服务器连接池,多服务器管理切换方便简洁

②下载安装
1
2
# wget -S http://www.junopen.com/memadmin/memadmin-1.0.12.tar.gz
# mv memadmin /usr/html/



③使用

浏览器输入http://localhost/memadmin【用户名密码均为admin】
wKiom1Zn8UySMPM0AAB0eOsoqxo698.jpg
wKiom1Zn8dmgdoWVAAEZjIoGJBI523.jpg



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-155997-1-1.html 上篇帖子: memcache的item key和序列化 下篇帖子: memcached安装及session共享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表