memcached软件下载安装教程
1、下载memcached软件压缩包,里面有32位和64位两个版本,选择你系统对应版本。解压放某个盘下面,比如在D:wampbin目录下
memcached软件下载:memcached.zip
2、在终端(CMD命令行)输入以下命令下:
①输入d:切换至D盘;
②输入cd wampbin切换至D:wampbin目录;
③输入dir查看当前目录下是否有memcached软件。
④输入:
memcached.exe -d install 安装
memcached.exe -d uninstall 卸载
memcached.exe -d stop 停止
memcached.exe -h 获取所有帮助
3、在启动之后连接:
D:wampbin> telnet 127.0.0.1 11211 –连接memcache端口11211使用quit退出。
memcached服务器CMD设置命令
启动Memcache 常用参数
-p 设置端口号(默认不设置为: 11211)
-U UDP监听端口(默认: 11211, 0 时关闭)
-l 绑定地址(默认:所有都允许,无论内外网或者本机更换IP,有安全隐患,若设置为127.0.0.1就只能本机访问)
-d 独立进程运行:
-d start 启动memcached服务
-d restart 重起memcached服务
-d stop|shutdown 关闭正在运行的memcached服务
-d install 安装memcached服务
-d uninstall 卸载memcached服务
-u 绑定使用指定用于运行进程
-m 允许最大内存用量,单位M (默认: 64 MB)
-P 将PID写入文件,可以使得后边进行快速进程终止,需要与-d 一起使用
-M 内存耗尽时返回错误,而不是删除项
-c 最大同时连接数,默认是1024
-f 块大小增长因子,默认是1.25
-n 最小分配空间,key+value+flags默认是48
-h 显示帮助
Memcache的常用操作命令
• 5个常用的命令
– stats: 当前所有memcached服务器运行的状态信息
– add: 添加一个数据到服务器
– set: 替换一个已经存在的数据,如果数据不存在,则和add命令相同。
– get: 从服务器端提取指定的数据。
– delete: 删除指定的单个数据,如果要清除所有数据,可以使用flush_all指令。
• Memcache的协议的错误部分主要是三个错误提示之提示指令:
– ERROR — 普通错误信息,比如指令错误之类的
– CLIENT_ERROR <错误信息> — 客户端错误
– SERVER_ERROR <错误信息> –服务器端错误
数据管理命令
• 格式:<命令> <键> <标记> <有效期> <数据长度>
其中:
– 命令:add(添加)、set(修改)、delete(删除)、get(获取)
– <键> -key,是发送过来指令的key内容
– <标记> – flags,是调用set指令保存数据时候的flags标记
– 有效期:是数据在服务器上的有效期限,如果是0,则数据永远有效,单位是秒
– 数据的长度,block data 块数据的长度,一般在这个个长度结束以后下一行跟着block data数据内容,
– 发送完数据以后,客户端一般等待服务器端的返回,服务器端的返回:
– STORED 数据保存成功
– NOT_STORED 数据保存失败,是因为服务器端这个数据key已经存在
PHP的memcache功能扩展模块安装
①把下载的php_memcache.dll文件放在PHP的扩展库目录下(PHP程序EXT目录下):
②在PHP.INI文件中加入“extension=php_memcache.dll”这句话,打开memcache.dll扩展库:
③重启appache服务。
使用phpinfo()函数查看memcache.dll是否安装成功:
PHP操作MemCache类的方法
Memcache类
Memcache::add ———— 增加一个条目到缓存服务器
Memcache::addServer ————向连接池中添加一个memcache服务器
Memcache::close ————关闭memcache连接
Memcache::connect ————打开一个memcached服务端连接
Memcache::decrement ————减小元素的值
Memcache::delete ————从服务端删除一个元素
Memcache::flush ————清洗(删除)已经存储的所有的元素
Memcache::get ————从服务端检回一个元素
Memcache::getExtendedStats ————缓存服务器池中所有服务器统计信息
Memcache::getServerStatus ———— 获取一个服务器的在线/离线状态
Memcache::getStats ———— 获取服务器统计信息
Memcache::getVersion ———— 返回服务器版本信息
Memcache::increment ———— 增加一个元素的值
Memcache::pconnect ———— 打开一个到服务器的持久化连接
Memcache::replace ———— 替换已经存在的元素的值
Memcache::set ————Store data at the server
Memcache::setCompressThreshold —————开启大值自动压缩
Memcache::setServerParams ————运行时修改服务器参数和状态
Memcache 函数memcache_debug ———— 转换调试输出的开/关
MemCache的实例应用
代码如下 | 复制代码 |
<?php //1. 创建对象 $mem = newMemcache(); //2. 添加服务器 $mem->addServer("192.168.150.250",11211); $mem->addServer("192.168.150.138",11211); $mem->addServer("192.168.112.128",11211); //3. 放置信息 $mem->add("mystr","hello memcache!",MEMCACHE_COMPRESSED,0); $mem->add("myarray",array(10,20,30,40),MEMCACHE_COMPRESSED,0); $mem->add("myob",newStu(),MEMCACHE_COMPRESSED,0); //4. 获取信息 echo $mem->get("mystr")."<br/>"; var_dump($mem->get('myarray')); echo "<br/>"; $mem->get("myob")->getinfo(); ?> MemCache的实例应用 <?php |
memcached服务器的安全防护
访问mysql数据库服务器时必须通过用户验证后才能进入,而访问memcached服务器则是直接通过客户端连接操作,没有任何验证过程。服务器如果直接暴漏在互联网上是非常危险的,轻则数据泄漏,重则服务器被入侵,还有可能存在一些未知的情况,所以危险性是可以预见的。为了安全起见,有以下两种方法:
1.内网访问
内网间的访问能够有效阻止其他非法的访问。如果让分布式的多个memcached服务器只在内部局域网中访问,需要设置Web服务器中的一块网卡在内网访问memcached服务器,Web服务器的另外一个网卡对外网。并在memcached服务器启动的时候就监听内网的IP地址和端口,memcached的启动选项使用如下所示:
memcached -d -m 1024 -u root –l 192.168.0.10 –p 11211 –c 1024 start
该命令设置memcached服务器在启动后监听内网的IP地址192.168.0.10,监听端口11211,占用1024MB内存,并且允许最大1024个并发连接。
2.设置防火墙
设置防火墙是简单有效的方式,如果memcached和Web Server在同一台机器上,或只要是有通过外网IP来访问memcached的情况就需要使用防火墙或者代理程序来过滤非法访问。一般在Linux系统下常用iptables来指定一些规则防止一些非法的访问。例如,设置只允许自己的Web服务器来访问我们的memcached服务器,同时组织其他的访问。防火墙iptables的规则设置如下所示:
iptables –F
iptables –P INPUT DROP
iptables –A INPUT –p tcp –s 192.168.0.10 –-dport 11211 –j ACCEPT
iptables –A INPUT –p udp –s 192.168.0.10 –-dport 11211 –j ACCEPT
上面的iptables规则只允许192.168.0.10这台Web服务器对memcached服务器的访问,能够阻止一些非法访问。当然也可以增加一些其他的规则来加强安全性,需要根据自己的需要来进行设置。
memcache实例应用——缓存数据库数据
在项目中最常见的MemCache应用,就是缓存从数据库中查询的数据结果,以及保存会话控制信息(session)。将数据库查询出来的结果使用memcached服务器进行缓存,以减少频繁的数据库连接及大量的查询对数据库造成的压力。设计的原则是只要数据库中的记录没有被改变,就不需要重新连接数据库并反复执行重复的查询语句,相同的查询结果都应该从缓存服务器中获取。memcache示例如下所示:
代码如下 | 复制代码 |
<?php //创建memcache对象 $mem = new Memcache; //连接memcache服务器 $mem -> addServer("localhost", 11211); $mem -> addServer("192.168.1.137", 11211); //数据库的连接和操作 $sql = "select id, name, pass, age, sex, email from users order by id"; $key=md5($sql); //直接从内存memcahce要数据 $data = $mem->get($key); //如果用数据就从内容中返回数据, 如果没有才连接数据库,执行SQL语句 if(empty($data)) { //连接 try { $pdo = new PDO("mysql:host=localhost;dbname=xsphp", "root", "123456"); }catch(PDOException $e) { echo "数据库连接失败:".$e->getMessage(); } //获取数据,执行查询语句 $stmt = $pdo -> prepare($sql); $stmt -> execute(); $data = $stmt -> fetchAll(PDO::FETCH_ASSOC); $mem -> set($key, $data, MEMCACHE_COMPRESSED, 10); echo "这是第一次访问从数据库获取的数据并放到了内存中!<br>"; } echo '<pre>'; print_r($data); echo '</pre>'; //关闭连接 $mem -> close(); ?> |