文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>memcached使用笔记(转贴)

memcached使用笔记(转贴)

时间:2006-05-26  来源:lenlydia

= 第一.memcached是什么? =
memcached事实上是一个分布式的存储缓存系统,它能够用来存储各种格式的数据,起初作者编写它可能是为了提高动态网页应用,为了减轻数据库检索的压力,来做的这个缓存系统。但是它本质上仍然只是一个缓存系统。 它的缓存是一种分布式的,也就是可以允许不同主机上的多个用户同时访问这个缓存系统, 这种方法不仅解决了共享内存只能是单机的弊端, 同时也解决了数据库检索的压力,最大的优点是提高了访问获取数据的速度!
= 第二.memcached的安装: =
memcached安装前首先确定你的服务器上面安装了libevent库,下载地址(
http://www.monkey.org/~provos/libevent/
)。安装完了libevent,就可以直接安装memcached了, 下载它的源码(
http://www.danga.com/memcached/download.bml
)。
tar -zxvf memcached-1.1.11.tar.gz
cd memcached-1.1.11
./configure //这里必须先要configure, 它会检测你的系统情况,然后生成一个config.h文件和其它的几个文件,另外和其它的configure一样,你可以配置它的安装路径等等!默认应用程序安装在/usr/local/bin目录下!
make //编译
su //切换到root
make install //安装
exit //退出到普通用户!
这样就安装好了memcahced, 我们启动memcached就可使用这块缓存系统了! = 第三.memcached的使用: =
. memcached的启动:
memcached的启动非常简单,它没有配置文件,只要配置好个别参数就可以使用了。下面我的一个实际应用的例子(具体说明一下):
memcached -d -m 64 -l 192.168.241.195 -p 11212
启动的这个memcached为一个后台守护进程模式(-d), 然后缓存的空间为64M(-m), 监听(-l)服务器192.168.241.195的11212号端口(-p). 其实memcached的参数也非常的有限,我使用了memcached -h命令,它也就下面的几种参数格式:
-p port number to listen on
-l interface to listen on, default is INDRR_ANY
-d run as a daemon
-r maximize core file limit
-u assume identity of (only when run as root)
-m max memory to use for items in megabytes, default is 64 MB
-M return error on memory exhausted (rather than removing items)
-c max simultaneous connections, default is 1024
-k lock down all paged memory
-v verbose (print errors/warnings while in event loop)
-vv very verbose (also print client commands/reponses)
-h print this help and exit
-i print memcached and libevent license
. memcached的客户应用连接
目前memcached已经编写好了perl, php, phyton这几种语言的客户端连接类,要应用其他的语言进行连接也可以自己编写(根据它们的协议protocol.txt)。 我个人使用了一下php的客户端的应用, 非常的方便,但是起初我得php没有安装socket支持, 它的客户端连接类里面用到了socket函数,所以重新安装了php, 在configure的时候加入参数--enable-sockets, 就可以了!当然你的其他的需要的php支持一定别忘了同时也要装上哦! 接下来就是使用memcached了。这里是我的一个测试的程序(我在服务器上开了两个memcached应用, 两个端口):
require("MemCachedClient.inc.php"); //加载下载的客户端类函数
$optionsservers = array("192.168.241.195:11211");
$optionsdebug = false;
$memc = new MemCachedClient($options);
$myarr = array("one","two", 3);
$memc->set("key_one", $myarr);
$val = $memc->get("key_one");
echo $val[0]."\n"; // prints 'one'
echo $val[1]."\n"; // prints 'two'
echo $val[2]."\n"; // prints 3
echo "\n";
$optionsservers = array("192.168.241.195:11212");
new MemCachedClient($options);
$myarr = "dongdongdong";
$newmemc->set("key_one", $myarr);
$val = $newmemc->get("key_one");
echo $val."\n"; //prints 'dongdongdong'
?>
这个php的连接类定义了以下的函数:
MemCachedClient::MemCachedClient($options);
MemCachedClient::set_servers($servers);
MemCachedClient::get($key);
MemCachedClient::get_multi($keys);
MemCachedClient::set($key, $value, $exptime);
MemCachedClient::add($key, $value, $exptime);
MemCachedClient::replace($key, $value, $exptime);
MemCachedClient::delete($key, $time = 0);
MemCachedClient::incr($key[, $value]);
MemCachedClient::decr($key[, $value]);
MemCachedClient::disconnect_all();
MemCachedClient::set_debug($do_debug);
MemCachedClient::forget_dead_hosts();
MemCachedClient::error();
MemCachedClient::error_string();
MemCachedClient::error_clear();
也就是说它的缓存可以缓存各种格式的数据,并且保持原来的格式不变,包括文件,图形,以及数据库检索的结果!
其它的perl, python语言的应该和这个类似吧, 我没有试过!
= 第四.memcached的优点: =
就我个人认为, memcached的最大优点就是可以分布式的缓存数据。这也是它所解决的主要问题。
= 第五.memcached的应用展望: =
使用了memcached以后, 我发现以前做过的很多的项目都可以应用它提高效率,包括最近做的“大单追踪”, “数码搜索”等等。当然既然memcahced是分布式的缓存系统,那么它就是建立了一个分布式的平台, 我们可以用它来进行分布式的记数, 因为对于一个键值key我们可以设置它的数值以及有效期在参数中,另外还可以重新设置这个键值的数值。 所以我总结了一下我们目前可以应用到的地方:
.数据库检索结果的缓存,也就是说可以有机的和数据库结合起来应用,提高效率!我们可以这样来实现:
打开memcached服务器连接
编写sql语句, 同时算出它的一个hash值(也就是key值)
获取这个hash值的memcached保存数据!(get)
如果获取的这个hash值的数据存在。返回!
否则连接数据库查找。
把这个查找结果保存在memcached中(set),可以设置有效期
返回查找结果!
?>
.分布式计数
.分布式共享数据等等。
对memcached的实际使用以及性能分析,可以参考
http://www.linuxjournal.com/article.php?sid=7451.html

= 实际使用: =
作者在内网的192.168.241.195上面开了两个memcahced服务,端口分别为11211, 11212每个都只有64M的缓存区, 如果要测试的话可以直接用客户端程序连接这两个memcached服务,来保存自己的数据。并且根据实际可能要使用的空间,开辟新的缓存区的大小! 另外现在在编写原来的一个大单追踪的程序,现在
http://192.168.241.109:5806/bill/memcached/all.php
(原来的
http://192.168.241.109:5806/bill/all.php
),想要测试它在实际应用的效果,。
= 对memcached的性能分析: =
编写程序,1个对数据库直接连接访问读取数据n次,一个访问一次以后缓存到memcached中, 以后到memcached中获取数据100次, 统计它们的时间。由于实际环境的限制,现在总共对以下的几种情况进行了分析: 因为在32位架构的服务器上, 最多有4G的地址空间, 所以开辟每个虚拟存储器内存空间不要超过4G, 但是根据需要我们可以同时打开多个memcahced,从而解决的这方面的限制! memcached设置:memcached -d -m 2048 -p 9876
对数据库在本地但是memcached不在本地的情况的时间统计
对数据库直接进行查询:(mysql机在本地)
bash-2.05$ time php notusememche.php 1>not.dong
real 0m14.897s
user 0m8.794s
sys 0m2.242s
使用memcache时候的结果:
bash-2.05$ time php usememche.php 1>usememche.dong
real 1m9.275s
user 0m29.797s
sys 0m2.469s
对于数据库和memcached都在本地的测试!都是本地机(192.168.241.109):
I。onetime 使用memcached的结果:
bash-2.05$ time php usememche.php 1>usememcache.log
real 0m33.463s
user 0m28.900s
sys 0m3.483s
对数据库直接进行查询的结果:
bash-2.05$ time php notusememche.php 1>notusememche.log
real 0m13.812s
user 0m8.796s
sys 0m2.243s
II。secondtime 使用memcached的结果:
bash-2.05$ time php usememche.php 1>usememcache.log
real 0m31.770s
user 0m28.635s
sys 0m2.480s
对数据库直接进行查询的结果:
bash-2.05$ time php notusememche.php 1>notusememche.log
real 0m25.263s
user 0m8.997s
sys 0m2.287s
通过以上的测试,反而看不出来它真正能够提高效率的地方,每次测试它的效率总是比本地取数据库的效率还要低!但是memcached可以同时很方便的打开n多个,这是mysql所不能达到的!
另外,对于memcached, 还测试了当我们要传送的数据要比缓存大的时候的情况: 那么它会自动的把以前保存的数据给删除掉, 从而保存最新的数据!这个有利有弊吧,如果用它来备份数据的话,这样可能会产生数据丢失!
对memcached的实际使用以及性能分析,可以参考
http://www.linuxjournal.com/article.php?sid=7451.html



相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载