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

[经验分享] memcache的安装和操作使用

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-8-8 16:40:05 | 显示全部楼层 |阅读模式
【背景】
memcached是一个开源的缓存服务,内存式的,数据以key/value值存在预先分配好的内存中。重启就丢失的。在内存中,所以存取速度快。 采用libevent事件模型。

memcached 是服务程序
memcache 是客户端程序 如作为php的模块
【应用场景】
1 mysql的缓存
2 session的缓存

【安装】
安装简单,易用

【安装步骤】
官网下载
http://memcached.org/  官网

http://www.memcached.org/files/memcached-1.4.29.tar.gz
wget http://www.memcached.org/files/memcached-1.4.29.tar.gz
1
2
3
4
5
tar -xvf  memcached-1.4.29.tar.gz
cd memcached-1.4.29
./configure --prefix=/usr/local/memcached
make
make install



可执行文件/usr/local/memcached/bin/memcached (可将其将加入环境变量)

如果不指定安装目录,默认安装在/usr/local 下面(则默认的可执行文件在/usr/local/bin/memcached)

【启动服务与停止服务】
查看帮助信息
/usr/local/memcached/bin/memcached -h
查看版本信息
/usr/local/memcached/bin/memcached -V
常用的启动参数:
-p <num>      TCP port number to listen on (default: 11211)
-u <username> assume identity of <username> (only when run as root)
-l <addr>     interface to listen on (default: INADDR_ANY, all addresses)
-d            run as a daemon
-m <num>      max memory to use for items in megabytes (default: 64 MB)
-P <file>     save PID in <file>, only used with -d option
-t <num>      number of threads to use (default: 4)
-c <num>      max simultaneous connections (default: 1024)
-M            return error on memory exhausted (rather than removing items)

启动2个实例:
1
/usr/local/memcached/bin/memcached  -p 11211 -u root -c 1024 -m 16m -d -P /var/run/memcached_11211.pid



1
/usr/local/memcached/bin/memcached  -p 11212 -u root -c 1024 -m 16m -d -P /var/run/memcached_11212.pid



验证:
1
2
ps -ef |grep memcached
netstat -tulnp |grep mem




停止memcached
1 可以强制全部杀死
1
pkill memcached



2 强制杀死一个
1
kill -9 pid



3 正规路径停止memcached

1
kill `cat /var/run/memcached_11211.pid`





【linux命令下简单操作memcached】

注意: 一般不常用,只为调试和学习用。
方式1 telnet
方式2 printf或结合nc命令  --- 推荐使用

设定一个key
printf "set key1 0 0 5\r\n12345\r\n"|nc 127.0.0.1 11211
获取一个key
printf "get key1\r\n"|nc 127.0.0.1 11211

echo stats | nc localhost  11211
echo stats items | nc 127.0.0.1 11211
实时查看状态
watch -n1 -d  "echo stats | nc localhost  11211"


【lamp 与lnmp中安装memcache模块的环境】
确保环境已经安装好 lnmp
查看php的配置信息

/usr/local/php/bin/php -i |grep configure
可以确定是lnmp还是php-fpm环境
或者通过
ls /usr/local/php 目录下是否有sbin目录,有则是lnmp环境,使用了sbin/php-fpm方式启动php

查看此时是否已经安装了memcache模块
[iyunv@slave html]# cat phpinfo.php
<?php
phpinfo();
?>

或者
/usr/local/php/bin/php -m
且此时不能看到memcache模块

【为lnmp的php安装memcache模块】
下载php的memcache模块

http://pecl.php.net/package/memcache
wget http://pecl.php.net/get/memcache-2.2.7.tgz
1
2
3
4
5
6
tar zxvf memcache-2.2.7.tgz
cd memcache-2.2.7
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make
make install




结果:
[iyunv@slave memcache-2.2.7]# make install
Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/

【memcache在php中生效-修改php.ini配置文件】
extension_dir = "./"
修改为
extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626"
并添加一行
extension = memcache.so

重启php-fpm
killall php-fpm
启动
/usr/local/php/sbin/php-fpm
或者知指定配置文件进行启动。
/usr/local/php/sbin/php-fpm -c /usr/local/php/etc/php.ini  -y /usr/local/php/etc/php-fpm.conf

-c <path>|<file> Look for php.ini file in this directory
-y, --fpm-config <file>

推荐使用(安全重启的方法)
kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`
1
默认php-fpm.conf是没有的需要自己创建,里面就是配置是管理php-fpm进程的。需要自己创建(且pid默认是none的,需要打开pid那行的配置文件,启用pid文件)




结果:
1
2
#/usr/local/php/bin/php -m |grep mem
memcache




且phpinfo页面可以看到memcache模块的详细信息

【一段小程序php连接memcache】
连接数据库只需要指定IP:port就可以了。
[iyunv@slave html]# cat  test_conn_memcache.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php  
//连接Memcache  
$mem = new Memcache;  
$mem->addServer("192.168.100.10", 11211);  
$mem->addServer("192.168.100.10", 11211);  
//保存数据  
$mem->set('key1', 'This is first 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 "After delete key1 ,Get key1 value: " . $val . "<br>";  
//关闭连接  
$mem->close();  
?>




或如下简单的程序
1
2
3
4
5
6
<?php
$memcache = new Memcache;             //创建一个memcache对象
$memcache->connect('localhost', 11211) or die ("Could not connect"); //连接Memcached服务器$memcache->
set('key', 'test');        //设置一个变量到内存中,名称是key 值是test
$get_value = $memcache->get('key');  //从内存中取出key的值
echo $get_value;?>



结果:
wKioL1enJW3z0IkOAABJv6ivvnE798.jpg

注意: php-fpm的日志路径/usr/local/php/var/log/php-fpm.log


【监控memcached的使用状态】
1 结合zabbix和shell
内存大小
命中率
2 使用开源的图形软件memadmin

http://www.junopen.com/memadmin
安装(lnmp 或者 lamp环境可运行)
wget  http://www.junopen.com/memadmin/memadmin-1.0.12.tar.gz
tar xvf memadmin-1.0.12.tar.gz -C /usr/local/nginx/html/
(可能要稍稍配置一下nginx.conf文件内容)
连接
http://192.168.100.13/memadmin/index.php?action=set.con


大致所的stats信息:
参数值描述
pid2773memcache服务器进程ID
uptime13263服务器已运行秒数
time1470577520服务器当前Unix时间戳
version1.4.13memcache版本
libevent1.4.13-stablelibevent版本
pointer_size64操作系统指针大小
rusage_user0.321951进程累计用户时间
rusage_system0.446932进程累计系统时间
curr_connections10当前连接数量
total_connections58Memcached运行以来连接总数
connection_structures12Memcached分配的连接结构数量
reserved_fds20内部使用的FD数
cmd_get   44get命令请求次数
cmd_set     26set命令请求次数
cmd_flush0flush命令请求次数
cmd_touch0touch命令请求次数
get_hits25get命令命中次数
get_misses19get命令未命中次数
delete_misses0delete命令未命中次数
delete_hits12delete命令命中次数
incr_misses0incr命令未命中次数
incr_hits0incr命令命中次数
decr_misses0decr命令未命中次数
decr_hits0decr命令命中次数
cas_misses0cas命令未命中次数
cas_hits0cas命令命中次数
cas_badval0使用擦拭次数
touch_hits0touch命令命中次数
touch_misses0touch命令未命中次数
auth_cmds0认证命令处理的次数
auth_errors0认证失败数目
bytes_read3121读取总字节数
bytes_written23943发送总字节数
limit_maxbytes16777216分配的内存总大小(字节)
accepting_conns1接受新的连接
listen_disabled_num0失效的监听数
threads     4当前线程数
conn_yields0连接操作主动放弃数目
hash_power_level16hash表等级
hash_bytes524288当前hash表大小
hash_is_expanding0hash表正在扩展
expired_unfetched0已过期但未获取的对象数目
evicted_unfetched0已驱逐但未获取的对象数目
bytes132当前存储占用的字节数
curr_items1当前存储的数据总数
total_items24启动以来存储的数据总数
evictions0LRU释放的对象数目
reclaimed1已过期的数据条目来存储新数据的数目

【memcached的集群】
因为mencache的各各节点是独立的,数据不共享,所以需要通过程序调度算法进行memcached分布式的使用.
如:memcache代理程序进行url hash算法 决定到某个node



运维网声明 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-254809-1-1.html 上篇帖子: memcached演练(1) 搭建memcached服务 下篇帖子: memadmin php展示memcahe状态信息
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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