1.什么是Memcached?

a.Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。

b.Memcached的键key一般是字符串,该值不能重复;value可以放入字符串、数组、数值、对象、布尔,二进制数据和图片视频

c.Memcached默认服务端口是11211

 

Window 下安装 Memcached

官网上并未提供 Memcached 的Window平台安装包,我们可以使用以下链接来下载,你需要根据自己的系统平台及需要的版本号点击对应的链接下载即可:

在 1.4.5 版本以前 memcached 可以作为一个服务安装,而在 1.4.5 及之后的版本删除了该功能。因此我们以下介绍两个不同版本 1.4.4 及 1.4.5的不同安装方法:


memcached <1.4.5 版本安装

1、解压下载的安装包到指定目录。

2、在 1.4.5 版本以前 memcached 可以作为一个服务安装,使用管理员权限运行以下命令:

c:\memcached\memcached.exe -d install

注意:你需要使用真实的路径替代 c:\memcached\memcached.exe。

3、然后我们可以使用以下命令来启动和关闭 memcached 服务:

c:\memcached\memcached.exe -d start
c:\memcached\memcached.exe -d stop

4、如果要修改 memcached 的配置项, 可以在命令行中执行 regedit.exe 命令打开注册表并找到 “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\memcached” 来进行修改。

如果要提供 memcached 使用的缓存配置 可以修改 ImagePath 为:

"c:\memcached\memcached.exe"-d runservice -m 512

-m 512 意思是设置 memcached 最大的缓存配置为512M。

此外我们还可以通过使用 “c:\memcached\memcached.exe -h” 命令查看更多的参数配置。

5、如果我们需要卸载 memcached ,可以使用以下命令:

c:\memcached\memcached.exe -d uninstall

memcached >= 1.4.5 版本安装

1、解压下载的安装包到指定目录。

2、在 memcached1.4.5 版本之后,memcached 不能作为服务来运行,需要使用任务计划中来开启一个普通的进程,在 window 启动时设置 memcached自动执行。

我们使用管理员身份执行以下命令将 memcached 添加来任务计划表中:

schtasks /create /sc onstart /tn memcached /tr "'c:\memcached\memcached.exe' -m 512"

注意:你需要使用真实的路径替代 c:\memcached\memcached.exe。

注意:-m 512 意思是设置 memcached 最大的缓存配置为512M。

注意:我们可以通过使用 “c:\memcached\memcached.exe -h” 命令查看更多的参数配置。

3、如果需要删除 memcached 的任务计划可以执行以下命令:\

 

schtasks /delete/tn memcached

4、memcached基本参数设置
-p 监听的端口
-l 连接的IP地址, 默认是本机
-d start 启动memcached服务
-d restart 重起memcached服务
-d stop|shutdown 关闭正在运行的memcached服务
-d install 安装memcached服务
-d uninstall 卸载memcached服务
-u 以的身份运行 (仅在以root运行的时候有效)
-m 最大内存使用,单位MB。默认64MB
-M 内存耗尽时返回错误,而不是删除项
-c 最大同时连接数,默认是1024
-f 块大小增长因子,默认是1.25
-n 最小分配空间,key+value+flags默认是48
-h 显示帮助

————————————————————————————————————————————————————————————

二、PHP安装memcache扩展

   1、下载memcache.dll扩展

下载地址:

http://windows.php.net/downloads/pecl/releases/memcache/3.0.8/

 

下载注意事项:选择匹配自己环境的版本以及线程安全版本。

查看自己PHP版本:phpinfo();

 

对应扩展文件这里

 

解压出来:

 

 

将其中的php_memcache.dll 扩展文件拷贝到 php 的扩展目录中,我的(D:\Xampp\php\ext)

 

打开php的php.ini文件

最后添加 一行代码:

extension=php_memcache.dll

 

然后保存之后,重启服务器

在使用phpinfo()查看

(如果没有显示,肯定是版本没对应)

---------------------------------------------------------------------------------------------------------

memcache服务器安全: 

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

现在就关于修改memcache服务器配置的问题说明如下: 

1>用内网ip的方式提供web应用服务器调用,不允许直接通过外网调用,如将memcache服务器放在192.168.1.55的服务器上 

2>修改端口,如改为11200 

3>分配内存,如分配1024M(1G内存) 

方法如下: 



1>开始>运行:CMD(确定) 

2>cd C:\memcached(回车) 

3>memcached -m 1024 -p 11200 -l 192.168.1.55(回车) 

注意,此时命令行不会回到C:\memcached>状态,并且实际上memcache服务器悄悄变为stop状态了。此窗口不可以关闭。新开一个cmd窗口 

4>开始>运行:CMD(确定) 

5>cd C:\memcached(回车) 

6>memcached -d start(回车)可以关闭此cmd窗口。 

此时可以使用新配置的memcache服务器了。 


上述方法虽然解决了修改默认配置的问题,但是始终会有一个cmd窗口不可以关闭,否则就回到11211端口的默认配置。 

更好的解决方案是通过修改服务的注册表配置: 

1>开始>运行:regedit(回车) 

2>在注册表中找到:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\memcached Server 

3>默认的ImagePath键的值是:"c:\memcached\memcached.exe" -d runservice,改为:"c:\memcached\memcached.exe" -d runservice -m 512 -p 11200 -l 192.168.1.55(确定,关闭注册表) 

4>我的电脑(右键)>管理>服务 找到memcache的服务,重新启动一次即可生效。 


此时,同网段内的电脑仍然可以利用这台memcache服务器,我们限定指定的web应用服务器才能够使用,通过防火墙的方式。如只允许192.168.1.2这台Web服务器对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服务器的访问,能够有效的阻止一些非法访问,相应的也可以增加一些其他的规则来加强安全性,这个可以根据自己的需要来做 


很多时候需要监控服务器上的Memcached运行情况,比如缓存的查询次数,命中率之类的。但找到的 
那个memcached-tool是linux下用perl写的,我也没试过windows能不能用。后来发现个简单的办法可以做到,就是使用Telnet。 

1、windows系统连接memcached端口 cmd命令行中键入telnet 192.168.1.1 11211 11211是memcached绑定的端口号。 
2、连接上端口后输入 stats命令,即可得到描述Memcached服务器运行情况的参数。 
STAT pid 4356 服务器进程ID 
STAT uptime 56625 服务器运行时间,单位秒 
STAT time 1225249079 服务器当前的UNIX时间 
STAT version 1.1.0 服务器的版本号 
STAT pointer_size 64 
STAT rusage_user 151.845489 该进程累计的用户时间(秒:微妙) 
STAT rusage_system 121.667603 该进程累计的系统时间(秒:微妙) 
STAT ibuffer_size 4096 
STAT curr_connections 13 连接数量 
STAT total_connections 54136 服务器运行以来接受的连接总数 
STAT connection_structures 318 服务器分配的连接结构的数量 
STAT cmd_get 100595 取回请求总数 
STAT cmd_set 6510 存储请求总数 
STAT get_hits 96543 请求成功的总次数 
STAT get_misses 4052 请求失败的总次数 
STAT bytes_read 4427679 服务器从网络读取到的总字节数 
STAT bytes_written 6585596 服务器向网络发送的总字节数 

1>、uptime 是memcached运行的秒数, 
2>、cmd_get是查询缓存的次数。 
3>、这两个数据相除一下就能得到平均每秒请求缓存的次数——最近niupu的流量很低,所以平均也就一秒请求一次多, 
这么点大的压力,用文件系统缓存一样没问题,根本不会体现出使用memcached的优越。 
4>、下面的cmd_set 就是设置key=>value的次数。整个memcached是个大hash,用cmd_get没有找到的内 
容,就会调用一下cmd_set写进缓存里。 
5>、紧跟着是get_hits,就是缓存命中的次数。缓存命中率 = get_hits/cmd_get * 100%。 
6>、下面的get_misses的数字加上get_hits应该等于cmd_get。 
7>、而total_itemscurr_items表示现在在缓存中的键值对个数. 
8>、在图上total_items == cmd_set == get_misses,不过当可用最大内存用光时,memcached就会删掉一些内容,上面的等式就不成立了

https://blog.csdn.net/ad132126/article/details/79537928