﻿<?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>C++博客-柯枫-随笔分类-Memcached</title><link>http://www.cppblog.com/kefeng/category/15147.html</link><description>我们应该做的并不是远方模糊不清的事，而是手边确定无疑的事情。</description><language>zh-cn</language><lastBuildDate>Tue, 12 Oct 2010 11:08:26 GMT</lastBuildDate><pubDate>Tue, 12 Oct 2010 11:08:26 GMT</pubDate><ttl>60</ttl><item><title>libmemcached安装及简单例子</title><link>http://www.cppblog.com/kefeng/archive/2010/10/11/129422.html</link><dc:creator>柯枫</dc:creator><author>柯枫</author><pubDate>Mon, 11 Oct 2010 04:05:00 GMT</pubDate><guid>http://www.cppblog.com/kefeng/archive/2010/10/11/129422.html</guid><wfw:comment>http://www.cppblog.com/kefeng/comments/129422.html</wfw:comment><comments>http://www.cppblog.com/kefeng/archive/2010/10/11/129422.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/kefeng/comments/commentRss/129422.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kefeng/services/trackbacks/129422.html</trackback:ping><description><![CDATA[1、下载安装libmemcached <br>&nbsp;$ wget http://launchpad.net/libmemcached/1.0/0.44/+download/libmemcached-0.44.tar.gz<br>&nbsp;$ tar xvzf libmemcached-0.44tar.gz <br>&nbsp;$ cd libmemcached-0.44<br>&nbsp;$ ./configure<br>&nbsp;$ make<br>&nbsp;$ sudo make install<br>&nbsp;libmemcached 默认安装在/usr/local/,头文件安装在/usr/local/include/libmemcachde/,动态库默认安装在/usr/local/lib/下。<br>2、libmemcached简单测试使用<br>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #000000;">#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">iostream</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;">#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;">#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">libmemcached</span><span style="color: #000000;">/</span><span style="color: #000000;">memcached.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">using</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">namespace</span><span style="color: #000000;">&nbsp;std;<br></span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;main(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;argc,</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">argv[])<br></span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;">{<br></span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">connect&nbsp;server</span><span style="color: #008000;"><br></span><span style="color: #008080;">10</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;memcached_st&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">memc;<br></span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;memcached_return&nbsp;rc;<br></span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;memcached_server_st&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">server;<br></span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;time_t&nbsp;expiration;<br></span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;uint32_t&nbsp;&nbsp;flags;<br></span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;memc&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;memcached_create(NULL);<br></span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;server&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;memcached_server_list_append(NULL,</span><span style="color: #000000;">"</span><span style="color: #000000;">localhost</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">11211</span><span style="color: #000000;">,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">rc);<br></span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;rc</span><span style="color: #000000;">=</span><span style="color: #000000;">memcached_server_push(memc,server);<br></span><span style="color: #008080;">19</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;memcached_server_list_free(server);<br></span><span style="color: #008080;">20</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">21</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;key&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">key</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br></span><span style="color: #008080;">22</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;value&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">value</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br></span><span style="color: #008080;">23</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;size_t&nbsp;value_length&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;value.length();<br></span><span style="color: #008080;">24</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;size_t&nbsp;key_length&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;key.length();<br></span><span style="color: #008080;">25</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">26</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">27</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">Save&nbsp;data</span><span style="color: #008000;"><br></span><span style="color: #008080;">28</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;rc</span><span style="color: #000000;">=</span><span style="color: #000000;">memcached_set(memc,key.c_str(),key.length(),value.c_str(),value.length(),expiration,flags);<br></span><span style="color: #008080;">29</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(rc</span><span style="color: #000000;">==</span><span style="color: #000000;">MEMCACHED_SUCCESS)<br></span><span style="color: #008080;">30</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="color: #008080;">31</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">"</span><span style="color: #000000;">Save&nbsp;data:</span><span style="color: #000000;">"</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">value</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;sucessful!</span><span style="color: #000000;">"</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">endl;<br></span><span style="color: #008080;">32</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">33</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">34</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">Get&nbsp;data</span><span style="color: #008000;"><br></span><span style="color: #008080;">35</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;result&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;memcached_get(memc,key.c_str(),key_length,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">value_length,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">flags,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">rc);<br></span><span style="color: #008080;">36</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(rc&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;MEMCACHED_SUCCESS)<br></span><span style="color: #008080;">37</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="color: #008080;">38</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">"</span><span style="color: #000000;">Get&nbsp;value:</span><span style="color: #000000;">"</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">result</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;sucessful!</span><span style="color: #000000;">"</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">endl;<br></span><span style="color: #008080;">39</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">40</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">41</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">Delete&nbsp;data</span><span style="color: #008000;"><br></span><span style="color: #008080;">42</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;rc</span><span style="color: #000000;">=</span><span style="color: #000000;">memcached_delete(memc,key.c_str(),key_length,expiration);<br></span><span style="color: #008080;">43</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(rc</span><span style="color: #000000;">==</span><span style="color: #000000;">MEMCACHED_SUCCESS)<br></span><span style="color: #008080;">44</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="color: #008080;">45</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">"</span><span style="color: #000000;">Delete&nbsp;key:</span><span style="color: #000000;">"</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">key</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;sucessful!</span><span style="color: #000000;">"</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">endl;<br></span><span style="color: #008080;">46</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">47</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">48</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">free</span><span style="color: #008000;"><br></span><span style="color: #008080;">49</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;memcached_free(memc);<br></span><span style="color: #008080;">50</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br></span><span style="color: #008080;">51</span>&nbsp;<span style="color: #000000;">}<br></span><span style="color: #008080;">52</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">53</span>&nbsp;<span style="color: #000000;"></span></div>
<br>编译：g++ -o testmemcached testmemcached.cpp -lmemcached<br>运行：./testmemcached<br>结果：Save data:value sucessful!<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Get value:value sucessful!<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Delete key:key sucessful!<br><br> <img src ="http://www.cppblog.com/kefeng/aggbug/129422.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kefeng/" target="_blank">柯枫</a> 2010-10-11 12:05 <a href="http://www.cppblog.com/kefeng/archive/2010/10/11/129422.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux下安装memcached</title><link>http://www.cppblog.com/kefeng/archive/2010/10/11/129408.html</link><dc:creator>柯枫</dc:creator><author>柯枫</author><pubDate>Mon, 11 Oct 2010 01:45:00 GMT</pubDate><guid>http://www.cppblog.com/kefeng/archive/2010/10/11/129408.html</guid><wfw:comment>http://www.cppblog.com/kefeng/comments/129408.html</wfw:comment><comments>http://www.cppblog.com/kefeng/archive/2010/10/11/129408.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/kefeng/comments/commentRss/129408.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kefeng/services/trackbacks/129408.html</trackback:ping><description><![CDATA[<p>1、运行memcached需要本文开头介绍的libevent库</p>
<pre><span style="color: #ff0000;">$ sudo yum install libevent libevent-deve</span></pre>
<p>2、下载安装memcached</p>
<pre style="color: #ff0000;">$ wget http://memcached.googlecode.com/files/memcached-1.4.5.tar.gz<br>$ tar zxf memcached-1.4.5.tar.gz
$ cd memcached-1.4.5
$ ./configure
$ make
$ sudo make install</pre>
<p>默认情况下memcached安装到/usr/local/bin下。</p>
<h3 style="font-weight: normal;" id="content_2_8">3、memcached的启动</h3>
<p>从终端输入以下命令，启动memcached。</p>
<pre><span style="color: #ff0000;">$ /usr/local/bin/memcached -p 11211 -m 64m -vv </span><span style="color: #805050; background-color: #90c1ff;"><br></span></pre>
<p>这里显示了调试信息。这样就在前台启动了memcached，监听TCP端口11211
最大内存使用量为64M。调试信息的内容大部分是关于存储的信息，
下次连载时具体说明。</p>
<p>作为daemon后台启动时，只需</p>
<pre style="color: #ff0000;">$ /usr/local/bin/memcached -p 11211 -m 64m -d</pre>
<p>这里使用的memcached启动选项的内容如下。</p>
<div class="ie5">
<table class="style_table" border="0" cellspacing="1">
    <tbody>
        <tr>
            <td style="color: #ff0000;" class="style_td">选项</td>
            <td style="color: #ff0000;" class="style_td">说明</td>
        </tr>
        <tr>
            <td style="color: #ff0000;" class="style_td">-p</td>
            <td style="color: #ff0000;" class="style_td">使用的TCP端口。默认为11211</td>
        </tr>
        <tr>
            <td style="color: #ff0000;" class="style_td">-m</td>
            <td style="color: #ff0000;" class="style_td">最大内存大小。默认为64M</td>
        </tr>
        <tr>
            <td style="color: #ff0000;" class="style_td">-vv</td>
            <td style="color: #ff0000;" class="style_td">用very vrebose模式启动，调试信息和错误输出到控制台</td>
        </tr>
        <tr>
            <td style="color: #ff0000;" class="style_td">-d</td>
            <td style="color: #ff0000;" class="style_td">作为daemon在后台启动</td>
        </tr>
    </tbody>
</table>
</div>
<p>上面四个是常用的启动选项，其他还有很多，通过</p>
<pre style="color: #ff0000;">$ /usr/local/bin/memcached -h</pre><img src ="http://www.cppblog.com/kefeng/aggbug/129408.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kefeng/" target="_blank">柯枫</a> 2010-10-11 09:45 <a href="http://www.cppblog.com/kefeng/archive/2010/10/11/129408.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>