Memcached Client的释疑
1.目前大多数php环境里使用的都是不带d的memcache版本,这个版本出的比较早,是一个原生版本,完全在php框架内开发的。与之对应的带d的memcached是建立在libmemcached的基础上,所以相对来说,memcached版本的功能更全一些,目前只有Linux版本 。
memcache:http://cn2.php.net/manual/en/book.memcache.php
memcached:http://cn2.php.net/manual/en/book.memcached.php 下载:https://github.com/php-memcached-dev/php-memcached/
2.memcache是原生实现的,支持OO和非OO两套接口并存。而memcached是使用libmemcached,只支持OO接口。
3.memcached还有个非常称赞的地方,就是flag不是在操作的时候设置了,而是有了一个统一的setOption()。Memcached实现了更多的memcached协议。
4.memcached支持Binary Protocol,而memcache不支持。这意味着memcached会有更高的性能。不过memcached目前还不支持长连接。
不过可以在window下用memcache,linux下用memcached,只要保证他们使用的接口一致就可以了:
Memcached/Memcache::add — 向一个新的key下面增加一个元素
Memcached/Memcache::addServer — 向服务器池中增加一个服务器
Memcached/Memcache::decrement — 减小数值元素的值
Memcached/Memcache::delete — 删除一个元素
Memcached/Memcache::flush — 作废缓存中的所有元素
Memcached/Memcache::get — 检索一个元素
Memcached/Memcache::getStats — 获取服务器池的统计信息
Memcached/Memcache::getVersion — 获取服务器池中所有服务器的版本信息
Memcached/Memcache::increment — 增加数值元素的值
Memcached/Memcache::replace — 替换已存在key下的元素
Memcached/Memcache::set — 存储一个元素
一. 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服务器的访问,能够有效的阻止一些非法访问,相应的也可以增加一些其他的规则来加强安全性,这 个可以根据自己的需要来做。
二.PHP中配置 Memcachd Client端

测试代码:
1.<?php
2.$memcache = new Memcache(); //windows
3.$memcache->connect('127.0.0.1', 11211 ) or die ( "Could not connect Memcached server!" );
4.$memcache->set( 'Memcache', "hello Memcache!<br/>");
5.echo $memcache->get('Memcache');
6.?>
1.<?php
2.$memcache = new Memcached(); //linux
3.$memcache->addServer('127.0.0.1', 11211 ) or die ( "Could not connect Memcached server!" );
4.$memcache->set( 'Memcached', "hello Memcached!<br/>");
5.echo $memcache->get('Memcached');
6.?>
三.PHP中缓存示例
<?php
$sql = 'SELECT * FROM users';
$mc = new Memcache;
$mc->pconnect('127.0.0.1', 11211);
$key = md5($sql); //memcached 对象标识符
if ( !($datas = $mc->get($key)) ) {
// 在 memcached 中未获取到缓存数据,则使用数据库查询获取记录集。
echo "n".str_pad('Read datas from MySQL.', 60, '_')."n";
$conn = mysql_connect('localhost', 'test', 'test');
mysql_select_db('test');
$result = mysql_query($sql);
while ($row = mysql_fetch_object($result))
$datas[] = $row;
// 将数据库中获取到的结果集数据保存到 memcached 中,以供下次访问时使用。
$mc->add($key, $datas);
} else {
echo "n".str_pad('Read datas from memcached.', 60, '_')."n";
}
var_dump($datas);
?>
四.安装OCS客户端(linux)
五.解决OCS的密码问题(linux)
ALIYUN_OCS_NAME OCS服务用户名
ALIYUN_OCS_PASW OCS服务密码
注意,环境变量一定要设置在你程序启动的用户下,建议直接在.bashrc中设置
<?php
$memc = new Memcached();
$memc->setOption(Memcached::OPT_COMPRESSION, false);
$memc->setOption(Memcached::OPT_BINARY_PROTOCOL, true);
$memc->addServer("10.232.X.X", 11211);
//$memc->setSaslAuthData("username", "password");//鉴权函数可以取消了
while(1)
{
$memc->set("key", "get OCS value");
$result = $memc->get("key");
var_dump($result);
sleep(1);
}
?>
Memcached Client的释疑的更多相关文章
- Memcached通用类(基于Memcached Client Library)
分享下自己编写的Memcached通用类.欢迎大家帮忙指点下哈~ 使用的是.NET memcached client library 客户端+Memcached Providers using Sys ...
- memcached client --ref
Clients Client API's / libraries Updated Jul 14, 2012 by dorma...@rydia.net ref:https://code.google. ...
- 安装java memcached client到本地maven repository
由于目前java memcached client没有官方的maven repository可供使用,因此使用时需要手动将其安装到本地repository.java memcached client的 ...
- memcached实例(enyim.com Memcached Client)
在上一篇文章,我们讲了,为什么要使用memched做为缓存服务器(没看的同学请点这里).下面让我们以memcached-1.2.1-win32版本的服务组件(安装后是以一个windows服务做daem ...
- 分布式缓存系统Memcached简介与实践(.NET memcached client library)
缘起: 在数据驱动的web开发中,经常要重复从数据库中取出相同的数据,这种重复极大的增加了数据库负载.缓存是解决这个问题的好办法.但是ASP.NET中的虽然已经可以实现对页面局部进行缓存,但还是不够灵 ...
- .NET Memcached Client 扩展获取所有缓存Key
.NET Memcached Client默认实现中并没有获取所有已经缓存Key的方法,但在业务中有时候需求中需要通过正则删除符合条件的缓存内容,所以就要通过读取已经缓存Key进行相关的匹配,然后删除 ...
- Memcached Client 使用手册
Memcached Client 使用手册 Author: cenwenchu Email: wenchu.cenwc@alibaba-inc.com Blog:http://blog.csdn.ne ...
- Memcached通用类(基于enyim.com Memcached Client)
一.如果用官方提供的方法,在web.config里面配置好了各个参数和服务器IP.如下图: <?xml version="1.0"?> <configuratio ...
- Memcached Java Client API详解
针对Memcached官方网站提供的java_memcached-release_2.0.1版本进行阅读分析,Memcached Java客户端lib库主要提供的调用类是SockIOPool和MemC ...
随机推荐
- logo集锦
收集一个酷酷的技术公司的logo,一方面学习其中的美,另一方面打算用代码的画出这些logo算做致敬.感谢他们改变了我们的世界. 三星 苹果 戴尔 谷歌 IBM intel 惠普
- springMVC注解及优化
1. 新建web project 2. 添加jar 3. 改写web.xml, 注意spring-servlet.xml的名字 <?xml version="1.0" enc ...
- IMapControl3 Interface(1) Properties属性
IMapControl3 Interface Provides access to members that control the MapControl. Note: the IMapControl ...
- 用css、html编写一个两列布局的网页,名称为css.html ,要求左侧宽度为200px ,右侧自动扩展
<body><div style=" float:left; width:200px; height:300px; border: 1px #0033FF solid;&q ...
- ZooKeeper 的安装和配置---单机和集群
如题本文介绍的是ZooKeeper 的安装和配置过程,此过程非常简单,关键是如何应用(将放在下节及相关节中介绍). 单机安装.配置: 安装非常简单,只要获取到 Zookeeper 的压缩包并解压到某个 ...
- linux usb installer
其实很简单,手册上有,cp debian....iso /dev/sdc,但是要把sdc上的分区删掉了先. This will only work if it is a hybrid ISO cont ...
- C语言实现GBK/GB2312/五大码之间的转换(转)
源:C语言实现GBK/GB2312/五大码之间的转换 //----------------------------------------------------------------------- ...
- Cocos2dx 学习笔记整理----第一个项目
接上一节, 进入新建的项目下面的proj.win32下面,找到项目名.sln文件(我的是game001.sln),双击会通过VS2010打开.(当然,你装了VS什么版本就是什么版本) 将你的项目设为启 ...
- sqlserver数据库类型对应Java中的数据类型
SQL Server 类型 JDBC 类型 (java.sql.Types) Java 语言类型 bigint BIGINT long timestamp binary BINARY byte[] b ...
- mysql问题: alter导致速度慢
1 如何并行执行. 数据库里有一个数据量非常大的表,当对这个表进行alter的时候,这时候该表是只读的,由于数据量很大alter时间很长,如果这时候有insert或update操作,有什么办法在这期间 ...