1.什么是Memcached?php
a.Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它经过在内存中缓存数据和对象来减小读取数据库的次数,从而提升动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,可是客户端能够用任何语言来编写,并经过memcached协议与守护进程通讯。linux
b.Memcached的键key通常是字符串,该值不能重复;value能够放入字符串、数组、数值、对象、布尔,二进制数据和图片视频web
c.Memcached默认服务端口是11211数据库
Window 下安装 Memcached
官网上并未提供 Memcached 的Window平台安装包,咱们可使用如下连接来下载,你须要根据本身的系统平台及须要的版本号点击对应的连接下载便可:windows
32位系统 1.2.5版本:http://static.runoob.com/download/memcached-1.2.5-win32-bin.zip
32位系统 1.2.6版本:http://static.runoob.com/download/memcached-1.2.6-win32-bin.zip
32位系统 1.4.4版本:http://static.runoob.com/download/memcached-win32-1.4.4-14.zip
64位系统 1.4.4版本:http://static.runoob.com/download/memcached-win64-1.4.4-14.zip
32位系统 1.4.5版本:http://static.runoob.com/download/memcached-1.4.5-x86.zip
64位系统 1.4.5版本:http://static.runoob.com/download/memcached-1.4.5-amd64.zip
在 1.4.5 版本之前 memcached 能够做为一个服务安装,而在 1.4.5 及以后的版本删除了该功能。所以咱们如下介绍两个不一样版本 1.4.4 及 1.4.5的不一样安装方法:数组
memcached <1.4.5 版本安装
一、解压下载的安装包到指定目录。缓存
二、在 1.4.5 版本之前 memcached 能够做为一个服务安装,使用管理员权限运行如下命令:安全
c:\memcached\memcached.exe -d install
注意:你须要使用真实的路径替代 c:\memcached\memcached.exe。服务器
三、而后咱们可使用如下命令来启动和关闭 memcached 服务:网络
c:\memcached\memcached.exe -d start
c:\memcached\memcached.exe -d stop
四、若是要修改 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" 命令查看更多的参数配置。
五、若是咱们须要卸载 memcached ,可使用如下命令:
c:\memcached\memcached.exe -d uninstall
memcached >= 1.4.5 版本安装
一、解压下载的安装包到指定目录。
二、在 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" 命令查看更多的参数配置。
三、若是须要删除 memcached 的任务计划能够执行如下命令:\
schtasks /delete /tn memcached
四、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 显示帮助
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2、PHP安装memcache扩展
一、下载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。
一、windows系统链接memcached端口 cmd命令行中键入telnet 192.168.1.1 11211 11211是memcached绑定的端口号。
二、链接上端口后输入 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