Memcache基础

Memcache是什么

Memcached是一个自由开源的,高性能,分布式内存对象缓存系统。php

本质上,它是一个简洁的 key-value 存储系统。它能够应对任意多个链接,使用非阻塞的网络IO。因为它的工做机制是在内存中开辟一块空间,而后创建一个HashTable,Memcached自管理这些HashTable。html

Memcache官方网站:http://www.danga.com/memcached,更多详细的信息能够来这里了解 :)java

(图片来源:菜鸟教程)node

为何会有Memcache和memcached两种名称?mysql

Memcache是该系统的项目名称,Memcached是该系统的主程序文件(字母d能够理解为daemon),以守护程序方式运行于一个或多个服务器中,随时接受客户端的链接操做,使用共享内存存取数据。linux

基本命令算法

存储命令:set、add、replace、append、prepend、CAS(Check-And-Set 或 Compare-And-Swap)sql

查找命令:get、gets、delete、incr/decr数据库

统计命令:stats、flush_all 等api

 

Memcache的安装
分为两个过程:memcache服务器端的安装和memcached客户端的安装。
所谓服务器端的安装就是在服务器(通常都是linux系统)上安装Memcache实现数据的存储
所谓客户端的安装就是指php(或者其余程序,Memcache还有其余不错的api接口提供)去使用服务器端的Memcache提供的函数,须要php添加扩展。

 

 

Java 链接 Memcached 服务

 

 

Memcache 分布式应用

memcached虽然称为“分布式”缓存服务器,但服务器端并无“分布式”功能。memcached的分布式,彻底由客户端程序库实现的。这种分布式是memcached的最大特色。
将不一样的键保存到不一样的服务器上,就实现了memcached 的分布式。 memcached 服务器增多后,键就会分散,即便一台memcached服务器发生故障没法链接,也不会影响其余的缓存,系统依然能继续运行。
Memcached的分布式方法
(1)根据余数计算分布  Hash() mod n
根据服务器台数的余数进行分散。求得键的整数哈希值,再除以服务器台数,根据其他数来选择服务器。
缺点:
余数计算的方法简单,数据的分散性也至关优秀,但也有其缺点。那就是当添加或移除服务器时,缓存重组的代价至关巨大。添加服务器后,余数就会产生巨变,这样就 没法获取与保存时相同的服务器 ,从而影响缓存的命中率。
(2)一致性哈希算法 
把每台server分红v个虚拟节点,再把全部虚拟节点(n*v)随机分配到一致性哈希的圆环上,这样全部的用户从本身圆环上的位置顺时针往下取到第一个vnode就是本身所属节点。当此节点存在故障时,再顺时针取下一个做为替代节点。 
从上图的状态中添加一台memcached服务器。余数分布式算法因为保存键的服务器会发生巨大变化而影响缓存的命中率,但Consistent Hashing中,只有在continuum上增长服务器的地点逆时针方向的第一台服务器上的键会受到影响。 
更多关于一致性哈希算法,参看《一致性 hash 算法( consistent hashing )》
 
Memcached 与数据库同步
Mysql经过触发器把表数据更改自动同步到memcached,并且能够实现对mysql表原有数据进行初始化到memcached下.

Memcache的安全
咱们上面的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
Memcache服务器端设置监听经过内网的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服务器的访问,可以有效的阻止一些非法访问,相应的也能够增长一些其余的规则来增强安全性,这个能够根据本身的须要来作。

 

本文章是整理收集而来,主要来源是:http://blog.csdn.net/heiyeshuwu/archive/2006/11/13/1380838.aspx

 

 

 

 

Reference:



相关文章
相关标签/搜索