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

[经验分享] Memcached安装配置

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-7-26 09:53:41 | 显示全部楼层 |阅读模式
一、Memcached介绍
  • 国外社区网站Live Journal团队开发,通过缓存数据库查询结果,减少数据库访问次数,从而提高动态Web站点性能。官方站点http://memcached.org
  • 基于C/S架构,协议简单
  • 基于Libevent的事件处理
  • 自主内存存储处理(Slab allowcation)
  • 数据过期方式:Lazy Expiration和LRU


二、Memcached流程图
减少对MySQL的读取次数
spacer.jpg QQ截图20160726095315.png

Slab allocation
  • Slab Allocation的原理——将分配的内存分割成各种尺寸的块(chunk),并把尺寸相同的块分成组(chunk的集合),每个chunk集合被称为slab.
  • Memcached的内存分配以Page为单位,Page默认值为1M,可以在启动时通过-l参数来指定。
  • Slab是由多个Page组成的,Page按照指定大小切割成多个chunk

spacer.jpg QQ截图20160726095325.png

Growth factor
  • memcached在启动时通过-f选项可以指定Growth Factor因子。该值控制chunk大小的差异。默认值为1.25
  • 通过memcached-tool查看指定memcached实例的不同slab状态,可以看到个ltem所占大小(chunk大小)差距为1.25
  • 命令:#memcached-tool 127.0.0.1:11211 display


Memcached数据过期方式
  • Lazy Expiration

memcached内部不会监视记录是否过期,而是在get时查看记录的时间戳,检查记录是否过期。这种技术被称为lazy(惰性)expiration。因此,memcached不会在过期监视上耗费CPU时间。
  • LRU

memcached会优先使用已超时的记录的空间,但即使如此,也会发生追加新纪录时空间不足的情况,此时就要使用名为Least Recently Used(LRU)机制来分配空间。顾名思义,就是删除“最近很少使用”的记录的机制。因此,当内存空间不足时(无法从slab class获取到新的空间时),就从最近未被使用的记录中搜索,并将其空间分配给新的记录。从缓存的使用角度来看,该模型十分理想。

三、Memcached安装
1.安装扩展源
1
2
3
4
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo/epel-6.repo   
yum clean all
yum makecache



#安装阿里yum源及扩展源

2.安装Memcached包及依赖包
yum install -y libevent memcached libmemcached nc

3.启动memcached服务
1
2
3
4
5
6
7
8
/etc/init.d/memcached start
ps aux | grep memcached
498        1029  0.0  0.0 330844   988 ?        Ssl  10:43   0:00 memcached -d -p 11211 -u memcached -m 64 -c 1024 -P /var/run/memcached/memcached.pid
netstat -tnlup| grep memcached
tcp        0      0 0.0.0.0:11211               0.0.0.0:*                   LISTEN      1029/memcached      
tcp        0      0 :::11211                    :::*                        LISTEN      1029/memcached      
udp        0      0 0.0.0.0:11211               0.0.0.0:*                               1029/memcached      
udp        0      0 :::11211                    :::*




4.memcached相关配置
vim /etc/sysconfig/memcached
PORT="11211"              #端口
USER="memcached"       #用户
MAXCONN="1024"         
CACHESIZE="64"       #内存
OPTIONS=""

5.memcached启动参数
-d   启动一个守护进程
-m  指定分配给memcached使用的内存数量,单位是MB
-u   指定memcached运行用户,如果当前为root,需要使用此参数
-l    指定监听的服务器IP地址
-p   指定memcached监听的端口,默认是11211
-c    指定最大运行的并发连接数,默认是1024
-P   设置memcached的PID文件

6.查看memcached运行状态
memcached-tool 127.0.0.1:11211 stats
echo stats | nc 127.0.0.1 11211
memstat --servers=127.0.0.1:11211

7.memcached基本操作
telnet 127.0.0.1 11211           #连接memcached

set key1 0 300 2   
12
STORED  
get key1
VALUE key1 0 2
12
END

memcached-tool 127.0.0.1:11211 display   #查看chunk

set :表示按照相应的<key>存储该数据,没有的时候增加,有的覆盖
add :表示按照相应的<key>添加该数据,但是如果该<key>已经存在则会操作失败
replace :表示按照相应的<key>替换数据,但是如果该<key>不存在则操作失败
<flags> 是一个16位无符号的整数
<exptime>过期的时间

8.PHP连接memcached
#找一台LNMP或LAMP,通过php自带的pecl安装程序
/usr/local/php/bin/pecl install memcache

也可以从源码安装
1
2
3
4
5
6
wget  http://www.lishiming.net/data/attachment/forum/memcache-2.2.3.tgz
tar zxf memcache-2.2.3.tgz
cd memcache-2.2.3
/usr/local/php/bin/phpize
../configure --with-php-config=/usr/local/php/bin/php-config
make && make install




安装完后会有类似这样的提示:
Installing '/usr/local/php/lib/php/extensions/no-debug-non-zts-20121212/memcache.so'
把这个记住,然后vim /usr/local/php/etc/php.ini ,把
extension_dir = "./"
修改为
extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20121212/"
并添加一行
extension="memcache.so"

检验
# /usr/local/php/bin/php -m
测试php脚本
wget www.apelearn.com/study_v2/.memcache.txt

mv .memcache.txt   test.php
/usr/local/php/bin/php test.php      #不要忘记安装memcached

Get key1 value: This is first value<br>Get key1 value: This is replace value<br>Get key2 value: Array
(
    [0] => aaa
    [1] => bbb
    [2] => ccc
    [3] => ddd
)
<br>Get key1 value: <br>Get key2 value: <br>
OK

9.memcached实现session共享
vim /usr/local/php/etc/php.ini
#搜索Session关键字,添加下面两行
session.save_handler = "memcache"
session.save_path = "tcp://127.0.0.1:11211"

或LAMP中
httpd.conf中对应的虚拟主机中添加:
php_value session.save_handler "memcache"
php_value session.save_path "tcp://127.0.0.1:11211"

或LNMP中
php-fpm.conf对应的pool中添加:
php_value[session.save_handler] = memcache
php_value[session.save_path] = "tcp://127.0.0.1:11211"




运维网声明 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-249515-1-1.html 上篇帖子: Memcached安装与启用 下篇帖子: 利用Memcached+Apache Tomcat+Nginx实现负载均衡
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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