﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-kingpub-文章分类-缓存技术</title><link>http://www.blogjava.net/kingpub/category/44214.html</link><description>海内存知己，博客若比邻</description><language>zh-cn</language><lastBuildDate>Fri, 05 Mar 2010 14:42:39 GMT</lastBuildDate><pubDate>Fri, 05 Mar 2010 14:42:39 GMT</pubDate><ttl>60</ttl><item><title>memcached 客户端使用</title><link>http://www.blogjava.net/kingpub/articles/memcached.html</link><dc:creator>xiaofeng</dc:creator><author>xiaofeng</author><pubDate>Fri, 05 Mar 2010 09:16:00 GMT</pubDate><guid>http://www.blogjava.net/kingpub/articles/memcached.html</guid><wfw:comment>http://www.blogjava.net/kingpub/comments/314635.html</wfw:comment><comments>http://www.blogjava.net/kingpub/articles/memcached.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kingpub/comments/commentRss/314635.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kingpub/services/trackbacks/314635.html</trackback:ping><description><![CDATA[&nbsp;
<p style="text-align: center" class="MsoNormal" align="center"><span style="font-size: 16pt">memCached</span><span style="font-family: 宋体; font-size: 16pt">环境配置及客户端调用相关说明</span></p>
<h3>memcached<span style="font-family: 宋体">是什么？</span></h3>
<p style="text-indent: 21pt" class="MsoNormal"><span style="font-family: 宋体">许多</span>Web<span style="font-family: 宋体">应用都将数据保存到</span>DBMS<span style="font-family: 宋体">中，应用服务器从中读取数据并在浏览器中显示。</span> <span style="font-family: 宋体">但随着数据量的增大、访问的集中，就会出现</span>RDBMS<span style="font-family: 宋体">的负担加重、数据库响应恶化、</span> <span style="font-family: 宋体">网站显示延迟等重大影响。</span></p>
<p style="text-indent: 21pt" class="MsoNormal">memcached <span style="font-family: 宋体">是以</span>LiveJournal <span style="font-family: 宋体">旗下</span>Danga Interactive <span style="font-family: 宋体">公司的</span>Brad Fitzpatric <span style="font-family: 宋体">为首开发的一款软件。</span>memcached<span style="font-family: 宋体">是高性能的分布式内存缓存服务器</span>,<span style="font-family: 宋体">也就是可以允许不同主机上的多个用户同时访问这个缓存系统，这种方法不仅解决了共享内存只能是单机的弊端，同时也解决了数据库检索的压力，最大的优点是提高了访问获取数据的速度</span><span style="font-family: 宋体">。</span> <span style="font-family: 宋体">一般的使用目的是，通过缓存数据库查询结果，减少数据库访问次数，以提高动态</span>Web<span style="font-family: 宋体">应用的速度、</span> <span style="font-family: 宋体">提高可扩展性。一般情况下</span>memcached<span style="font-family: 宋体">的用途如下：</span></p>
<h3>Memcached<span style="font-family: 宋体">的内置内存存储方式</span></h3>
<p style="text-indent: 21pt" class="MsoNormal"><span style="font-family: 宋体">为了提高性能，</span>memcached<span style="font-family: 宋体">中保存的数据都存储在</span>memcached<span style="font-family: 宋体">内置的内存存储空间中。由于数据仅存在于内存中，因此重启</span>memcached<span style="font-family: 宋体">、重启操作系统会导致全部数据消失。另外，内容容量达到指定值之后，就基于</span>LRU(Least&nbsp;Recently&nbsp;Used)<span style="font-family: 宋体">算法自动删除不使用的缓存。</span>memcached<span style="font-family: 宋体">本身是为缓存而设计的服务器，因此并没有过多考虑数据的永久性问题。所以我们在取值时，应考虑缓存中的数据已经被替换掉或者是程序员自已对数据置了过期时间的情况。即应判断</span> get(key)==null<span style="font-family: 宋体">的情况。</span></p>
<h3>Memcached<span style="font-family: 宋体">的架构：</span></h3>
<p style="text-indent: 21pt" class="MsoNormal">memcached<span style="font-family: 宋体">尽管是&#8220;分布式&#8221;缓存服务器，但服务器端并没有分布式功能。各个</span>memcached<span style="font-family: 宋体">不会互相通信以共享信息。那么，怎样进行分布式完全取决于客户端的实现。</span></p>
<p>memcached<span style="font-family: 宋体">的分布式</span>:</p>
<p><span style="font-family: 宋体">我们采用的</span>memcached for java client<span style="font-family: 宋体">所使用的分布式算法是</span>Consistent&nbsp;Hashing<span style="font-family: 宋体">算法。</span></p>
<h3>windows<span style="font-family: 宋体">下</span>memCached<span style="font-family: 宋体">服务器端搭建：</span></h3>
<p style="text-indent: -18pt; margin-left: 18pt" class="MsoListParagraph">1.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">下载</span><a href="http://jehiah.cz/projects/memcached-win32" target="_blank">memcache</a>(http://jehiah.cz/projects/memcached-win32/)<span style="font-family: 宋体">的</span>windows<span style="font-family: 宋体">稳定版，解压到某一路径，即为</span>memcached_home<span style="font-family: 宋体">。</span></p>
<p style="text-indent: -18pt; margin-left: 18pt" class="MsoListParagraph">2.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">在终端（也即</span>cmd<span style="font-family: 宋体">命令界面）下输入</span> &#8216;%memcached_home%"memcached.exe -d install&#8217; <span style="font-family: 宋体">安装</span></p>
<p style="text-indent: -18pt; margin-left: 18pt" class="MsoListParagraph">3.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">再输入：</span> &#8216;%memcached_home%"memcached.exe -d start&#8217; <span style="font-family: 宋体">启动。注意</span>: <span style="font-family: 宋体">以后</span>memcached<span style="font-family: 宋体">将作为</span>windows<span style="font-family: 宋体">的一个服务每次开机时自动启动，这样服务器端已经安装完毕了。</span></p>
<p style="text-indent: -18pt; margin-left: 18pt" class="MsoListParagraph">4.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Memcached<span style="font-family: 宋体">常用参数说明</span>:</p>
<p style="margin-left: 17.95pt" class="MsoListParagraph">memcached -d &#8211;m 1024&nbsp; -l 192.200.1.75 -p 11211</p>
<p style="text-indent: 15.75pt" class="MsoNormal">-d <span style="font-family: 宋体">以守护程序（</span>daemon<span style="font-family: 宋体">）方式运行</span> memcached<span style="font-family: 宋体">；</span> </p>
<p style="text-indent: 15.75pt" class="MsoNormal">-m <span style="font-family: 宋体">设置</span> memcached<span style="font-family: 宋体">可以使用的内存大小，单位为</span> M<span style="font-family: 宋体">；</span> </p>
<p style="text-indent: 15.75pt" class="MsoNormal">-l <span style="font-family: 宋体">设置监听的</span> IP <span style="font-family: 宋体">地址，如果是本机的话，通常可以不设置此参数；</span> </p>
<p style="text-indent: 15.75pt" class="MsoNormal">-p <span style="font-family: 宋体">设置监听的端口，默认为</span> 11211<span style="font-family: 宋体">，所以也可以不设置此参数；</span></p>
<h3>Linux<span style="font-family: 宋体">下的安装：</span></h3>
<p>memcached<span style="font-family: 宋体">安装与一般应用程序相同，</span>configure<span style="font-family: 宋体">、</span>make<span style="font-family: 宋体">、</span>make&nbsp;install<span style="font-family: 宋体">就行了。</span></p>
<p>$&nbsp;wget&nbsp;http://www.danga.com/memcached/dist/memcached&shy;1.2.5.tar.gz</p>
<p>$&nbsp;tar&nbsp;zxf&nbsp;memcached&shy;1.2.5.tar.gz</p>
<p>$&nbsp;cd&nbsp;memcached&shy;1.2.5</p>
<p>$&nbsp;./configure</p>
<p>$&nbsp;make</p>
<p>$&nbsp;sudo&nbsp;make&nbsp;install</p>
<p><span style="font-family: 宋体">默认情况下</span>memcached<span style="font-family: 宋体">安装到</span>/usr/local/bin<span style="font-family: 宋体">下。</span></p>
<p><span style="font-family: 宋体">从终端输入</span>:$&nbsp;/usr/local/bin/memcached&nbsp;&shy;p&nbsp;11211&nbsp;&shy;m&nbsp;64m&nbsp;&shy;vv<span style="font-family: 宋体">即可启动</span>memcached</p>
<h3>Memcached<span style="font-family: 宋体">的</span>java<span style="font-family: 宋体">客户端的使用。</span></h3>
<p style="text-indent: -18pt; margin-left: 18pt" class="MsoListParagraph">1.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">下载</span>Memcached <span style="font-family: 宋体">的</span>java<span style="font-family: 宋体">客户端包</span>(<a href="http://www.whalin.com/memcached/#download">http://www.whalin.com/memcached/#download</a>)</p>
<p style="text-indent: -18pt; margin-left: 18pt" class="MsoListParagraph">2.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">根据不同版本构建到工程中。</span></p>
<p style="text-indent: -18pt; margin-left: 18pt" class="MsoListParagraph">3.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">由于</span>Memcached<span style="font-family: 宋体">的客户端在处理大对象的序列化时，效率较差，通过</span>hessian<span style="font-family: 宋体">的序列化工具进行了相应模块的替换。优化后的</span>memcached java client <span style="font-family: 宋体">加入到项目构建路径中即可。</span></p>
<p style="text-indent: -18pt; margin-left: 18pt" class="MsoListParagraph">4.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">调用方法详见</span>API<span style="font-family: 宋体">。</span></p>
<p style="text-indent: -18pt; margin-left: 18pt" class="MsoListParagraph">5.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">依赖的包及生成后的</span>memcached<span style="font-family: 宋体">的包：</span></p>
<img src ="http://www.blogjava.net/kingpub/aggbug/314635.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kingpub/" target="_blank">xiaofeng</a> 2010-03-05 17:16 <a href="http://www.blogjava.net/kingpub/articles/memcached.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>