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

[经验分享] 我的Memcache学习笔记

[复制链接]

尚未签到

发表于 2015-8-31 07:48:11 | 显示全部楼层 |阅读模式
一、编绎安装Memcached
二、Memcached基本命令
四、PHP扩展模块安装
五、设置session用memcache来存储
六、PHP使用Memcache的一致性哈希连接方式
七、Memcached的安全性

关于memcache与memcached,首先服务器上安装的提供服务的软件名称叫memcached,不过我们通常都叫它memcache,PHP用来连接操作memcached的扩展有两个,即memcache扩展和memcached扩展。
一、编绎安装Memcached
1、环境准备
系统:Centos6.4最小安装+开发工具包
Memcached所需要的库:libevent
2、安装libevent



# tar xzvf libevent-1.4.14b-stable.tar.gz
# cd libevent-1.4.14b-stable
# ./configure --prefix=/usr/local/libevent
# Make && make install
3、安装memcached



# tar xzvf memcached-1.4.5.tar.gz
# cd memcached-1.4.5
# ./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent
# make && make install
二、Memcached基本命令
1、启动 memcached




./memcached -d -m 2048 -p 11211
# 常用启动参数
-d    启动一个守护进程
-vv    调试信息和错误输出到控制台
-m    分配给memcache使用的内存数量,单位是mb,默认是64mb
-u    运行memcached的用户
-l    监听的服务器ip地址
-p    设置memcached监听的端口,最好是1024以上的端口
-c    设置最大运行的并发连接数,默认是1024
-P    设置保存memcached的pid文件
这会以守护程序的形式启动 memcached(-d),为其分配 2GB 内存(-m 2048),并指定监听 localhost,即端口 11211。
2、连接到 memcached




telnet localhost 11211
3、memcached增删改查
3.1 修改命令语法



command <key> <flags> <expiration> <bytes>
<value>
command    操作命令:set、add、repalce
Key            字符串,<250个字符,不包含空格和控制字符
Flags        客户端用来标识数据格式的数值,如json,xml,压缩等
Expiration    存活时间(秒),0为永久。
Bytes        在缓存中存储的字节点
Value        存储的值
3.2 set
set 命令用于向缓存添加新的键值对。如果键已经存在,则之前的值将被替换。




set userId 0 30 5
12345
STORED
如果使用 set 命令正确设定了键值对,服务器将使用单词 STORED 进行响应。本示例向缓存中添加了一个键值对,其键为 userId,其值为 12345。并将过期时间设置为 30秒。
3.3 add
仅当缓存中不存在键时,add 命令才会向缓存中添加一个键值对。如果缓存中已经存在键,则之前的值将仍然保持相同,并且您将获得响应 NOT_STORED。




set userId 0 0 5
12345
STORED
add userId 0 0 5
55555
NOT_STORED
add companyId 0 0 3
564
STORED


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

  



replace accountId 0 0 5
67890
NOT_STORED
set accountId 0 0 5
67890
STORED
replace accountId 0 0 5
55555
STORED


3.5 get
get 命令用于检索与之前添加的键值对相关的值,如果这个键存在于缓存中,则返回相应的值。如果不存在,则不返回任何内容。




set userId 0 0 5
12345
STORED
get userId
VALUE userId 0 5
12345
END
get bob
END
3.6 delete
delete 命令用于删除 memcached 中的任何现有值。您将使用一个键调用 delete,如果该键存在于缓存中,则删除该值。如果不存在,则返回一条 NOT_FOUND 消息。




set userId 0 0 5
98765
STORED
delete bob
NOT_FOUND
delete userId
DELETED
get userId
END
4、缓存管理命令
4.1 stats
stats 命令的功能是转储所连接的memcached实例的当前统计数据。




stats
STAT pid 63
STAT uptime 101758
STAT time 1248643186
STAT version 1.4.11
STAT pointer_size 32
STAT rusage_user 1.177192
STAT rusage_system 2.365370
STAT curr_items 2
STAT total_items 8
STAT bytes 119
STAT curr_connections 6
STAT total_connections 7
STAT connection_structures 7
STAT cmd_get 12
STAT cmd_set 12
STAT get_hits 12
STAT get_misses 0
STAT evictions 0
STAT bytes_read 471
STAT bytes_written 535
STAT limit_maxbytes 67108864
STAT threads 4
4.2 flush_all
flush_all用于清理缓存中的所有名称/值对。


三、缓存性能




名称




描述




pid




Memcached进程ID




uptime




Memcached运行时间,单位:秒




time




Memcached当前的UNIX时间




version




Memcached的版本号




rusage_user




该进程累计的用户时间,单位:秒




rusage_system




该进程累计的系统时间,单位:秒




curr_connections




当前连接数量




total_connections




Memcached运行以来接受的连接总数




connection_structures




Memcached分配的连接结构的数量




cmd_get




查询请求总数




get_hits




查询成功获取数据的总次数




get_misses




查询成功未获取到数据的总次数




cmd_set




存储(添加/更新)请求总数




bytes




Memcached当前存储内容所占用字节数




bytes_read




Memcached从网络读取到的总字节数




bytes_written




Memcached向网络发送的总字节数




limit_maxbytes




Memcached在存储时被允许使用的字节总数




curr_items




Memcached当前存储的内容数量




total_items




Memcached启动以来存储过的内容总数




evictions




LRU释放对象数,用来释放内存







根据stats所获得到的统计结果,我们可以确定缓存的利用率。初次启动缓存时,可以看到 get_misses会自然地增加,但在经过一定的使用量之后,get_misses值应该会逐渐趋于平稳,这表示缓存主要用于常见的读取操作。确定缓存效率的另一种方法是查看缓存的命中率(hit ratio)。缓存命中率表示执行get的次数与错过get的次数的百分比,即get_hits/cmd_get*100%。





四、PHP扩展模块安装


Memcache扩展安装


下载地址:http://pecl.php.net/package/memcache





# 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






# 完成之后会显示扩展文件的安装路径,类似:/usr/local/php/lib/php/extensions/no-debug-non-zts-20121212/
# 编辑php.ini
# 确保extension_dir的路径为make install之后显示的路径
# 加入extension = memcache.so



Memcached扩展安装
软件准备:libmemcached、memcached
libmemcached下载地址:https://launchpad.net/libmemcached/+download
memcached下载地址:http://pecl.php.net/package/memcached



#安装libmemcached
# tar zxvf libmemcached-1.0.17.tar.gz
# cd libmemcached-1.0.17
# ./configure --prefix=/usr/local/libmemcached --with-memcached
# make && make install


#安装memcached
# tar zxvf memcached-2.1.0.tgz
# cd memcached-2.1.0
# /usr/local/php/bin/phpize
# ./configure --with-php-config=/usr/local/php/bin/php-config --with-libmemcached-dir=/usr/local/libmemcached
# make && make install




#完成之后会显示扩展文件的安装路径,类似:/usr/local/php/lib/php/extensions/no-debug-non-zts-20121212/
# 编辑php.ini
# 确保extension_dir的路径为make install之后显示的路径
# 加入extension = memcached.so
  
五、设置session用memcache来存储




方法I: 在php.ini中全局设置
session.save_handler = memcache  
session.save_path = "tcp://127.0.0.1:11211"  
  



方法II: 再程序中动态设置
ini_set("session.save_handler", "memcache");  
ini_set("session.save_path", "tcp://127.0.0.1:11211");  
  



方法III: htaccess 文件设置
php_value session.save_handler "memcache"  
php_value session.save_path  "tcp://127.0.0.1:11211"   
  

session.save_path可以带额外的参数"persistent"、"weight"、"timeout"、"retry_interval" 等等,使用多个memcached服务器时用逗号","隔开,如:" tcp://host1:port1?persistent=1&weight=2,tcp://host2:port2 "。





六、PHP使用Memcache的一致性哈希连接方式


PHP中自带了两个memcache扩展,即memcache扩展和memcached扩展,默认情况下,两个扩展均采用余数计算分散的分布式算法,这种分布式在添加或移除服务器时,缓存重组的代价相当巨大。添加或移除服务器后,余数就会产生巨变,这样就无法获取与保存时相同的服务器,从而影响缓存的命中率,在Web应用程序中使用memcached时,在添加memcached服务器的瞬间缓存效率会大幅度下降,负载会集中到数据库服务器上,有可能会数据库服务器的崩溃,因此推荐使用一致性哈希算法。一至性哈希算法(Consistent Hashing)能够最大限度地减小服务器增减时的缓存重新分布。


Memcache扩展使用一至性哈希算法配置:




修改php.ini
memcache.hash_strategy = 'consistent';
也可以在程序中动态设置
ini_set('memcache.hash_strategy', 'consistent');
  

Memcached扩展使用一至性哈希算法配置:




$mc = new memcached();
$mc->setOption(Memcached::OPT_DISTRIBUTION, Memcached::DISTRIBUTION_CONSISTENT );
$mc->setOption(Memcached::OPT_LIBKETAMA_COMPATIBLE , true);
  
七、Memcached的安全性

Memcache服务器端都是直接通过客户端连接后直接操作,没有任何的验证过程,这样如果服务器是直接暴露在互联网上的话是比较危险,轻则数据泄露被其他无关人员查看,重则服务器被入侵,因为Mecache是以root权限运行的,况且里面可能存在一些我们未知的bug或者是缓冲区溢出的情况,这些都是我们未知的,所以危险性是可以预见的。为了安全起见,我做两点建议,能够稍微的防止黑客的入侵或者数据的泄露。

内网访问
最好把两台服务器之间的访问是内网形态的,一般是Web服务器跟Memcache服务器之间。普遍的服务器都是有两块网卡,一块指向互联网,一块指向内网,那么就让Web服务器通过内网的网卡来访问Memcache服务器,我们Memcache的服务器上启动的时候就监听内网的IP地址和端口,内网间的访问能够有效阻止其他非法的访问。




# memcached -d -m 1024 -u root -l 192.168.0.200 -p 11211 -c 1024 -P /tmp/memcached.pid
Memcached服务器端设置监听通过内网的192.168.0.200的ip的11211端口,占用1024MB内存,并且允许最大1024个并发连接


设置防火墙
防火墙是简单有效的方式,如果却是两台服务器都是挂在网的,并且需要通过外网IP来访问Memcache的话,那么可以考虑使用防火墙或者代理程序来过滤非法访问。
一般我们在Linux下可以使用iptables或者FreeBSD下的ipfw来指定一些规则防止一些非法的访问,比如我们可以设置只允许我们的Web服务器来访问我们Memcache服务器,同时阻止其他的访问。




# iptables -F
# iptables -P INPUT DROP
# iptables -A INPUT -p tcp -s 192.168.0.2 –dport 11211 -j ACCEPT
# iptables -A INPUT -p udp -s 192.168.0.2 –dport 11211 -j ACCEPT
上面的iptables规则就是只允许192.168.0.2这台Web服务器对Memcache服务器的访问,能够有效的阻止一些非法访问,相应的也可以增加一些其他的规则来加强安全性,这个可以根据自己的需要来做。

运维网声明 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-106509-1-1.html 上篇帖子: Memcache的问题集 下篇帖子: memcache总结
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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