<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>I@laoer.com &#187; Memcached</title>
	<atom:link href="http://i.laoer.com/tag/memcached/feed" rel="self" type="application/rss+xml" />
	<link>http://i.laoer.com</link>
	<description>技术、生活、感悟 -- Laoer的博客</description>
	<lastBuildDate>Mon, 15 Feb 2010 08:36:53 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Kohana的Cache</title>
		<link>http://i.laoer.com/kohana-cache-memcached.html</link>
		<comments>http://i.laoer.com/kohana-cache-memcached.html#comments</comments>
		<pubDate>Wed, 15 Apr 2009 09:42:25 +0000</pubDate>
		<dc:creator>Laoer</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Kohana]]></category>
		<category><![CDATA[Memcached]]></category>

		<guid isPermaLink="false">http://i.laoer.com/?p=274</guid>
		<description><![CDATA[Kohana里有个Cache Library，我今天就测试了一下。
首先要配置，将system/config下的cache.php复制到application/config下，打开cache.php文件，我们看一下内容

1
2
3
4
5
6
7
$config&#91;'default'&#93; = array
&#40;
    'driver'   =&#62; 'file',
    'params'   =&#62; APPPATH.'cache',
    'lifetime' =&#62; 1800,
    'requests' =&#62; 1000
&#41;;

这是一个默认配置，&#8217;driver&#8217;为驱动的缓存方式，Kohana支持6种不同的驱动，分别是File、SQlite、Memcache、APC、Eaccelerator、Xcache，配置文件默认使用的file，其原理是，写缓存时把对象序列化写入文件，读缓存时从文件读出文本反序列化，所以在文件方式下，缓存是基于I/O的，在文件多而且大的时候，性能会有下降， &#8216;params&#8217;是驱动参数，在file驱动模式下，就是cache文件路径，&#8217;lifetime&#8217;是cache的生命周期，单位为秒，超过这个时间，内容将被清除（设置为0代表不自动清除），&#8217;requests&#8217;为在达到请求数量之前自动垃圾回收。
在应用中，可能需要不止一个缓存，所以可以配置多个缓存，增加$config数组即可，还有在file方式下可以为每个缓存设置单独文件路径，但前提是文件路径要存在，例如我们增加一个

1
2
3
4
5
6
7
$config&#91;'my'&#93; = array
&#40;
    'driver'   =&#62; 'file',
    'params'   =&#62; APPPATH.'cache/my',
    'lifetime' [...]]]></description>
			<content:encoded><![CDATA[<p><a title="Kohana" href="http://kohanaphp.com/" target="_blank">Kohana</a>里有个Cache Library，我今天就测试了一下。</p>
<p>首先要配置，将system/config下的cache.php复制到application/config下，打开cache.php文件，我们看一下内容</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'default'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span>
<span style="color: #009900;">&#40;</span>
    <span style="color: #0000ff;">'driver'</span>   <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'file'</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'params'</span>   <span style="color: #339933;">=&gt;</span> APPPATH<span style="color: #339933;">.</span><span style="color: #0000ff;">'cache'</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'lifetime'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">1800</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'requests'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">1000</span>
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>这是一个默认配置，&#8217;driver&#8217;为驱动的缓存方式，Kohana支持6种不同的驱动，分别是File、SQlite、Memcache、APC、Eaccelerator、Xcache，配置文件默认使用的file，其原理是，写缓存时把对象序列化写入文件，读缓存时从文件读出文本反序列化，所以在文件方式下，缓存是基于I/O的，在文件多而且大的时候，性能会有下降， &#8216;params&#8217;是驱动参数，在file驱动模式下，就是cache文件路径，&#8217;lifetime&#8217;是cache的生命周期，单位为秒，超过这个时间，内容将被清除（设置为0代表不自动清除），&#8217;requests&#8217;为在达到请求数量之前自动垃圾回收。</p>
<p>在应用中，可能需要不止一个缓存，所以可以配置多个缓存，增加$config数组即可，还有在file方式下可以为每个缓存设置单独文件路径，但前提是文件路径要存在，例如我们增加一个</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'my'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span>
<span style="color: #009900;">&#40;</span>
    <span style="color: #0000ff;">'driver'</span>   <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'file'</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'params'</span>   <span style="color: #339933;">=&gt;</span> APPPATH<span style="color: #339933;">.</span><span style="color: #0000ff;">'cache/my'</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'lifetime'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">1800</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'requests'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">1000</span>
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>接下来我们在Controller里调用cache</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> Mycache_Controller <span style="color: #000000; font-weight: bold;">extends</span> Controller <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> index<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$mychache</span> <span style="color: #339933;">=</span> Cache<span style="color: #339933;">::</span><span style="color: #004000;">instance</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;my&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$mychache</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">set</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;name&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;laoer&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;OK&quot;</span><span style="color: #339933;">;</span>   
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> name<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$mychache</span><span style="color: #339933;">=</span> Cache<span style="color: #339933;">::</span><span style="color: #004000;">instance</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;my&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$name</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$mychache</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;name&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$name</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>   
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Cache::instance(&#8220;my&#8221;)实例化配置里$config['my']的cache，如果用Cache::instance()就是实例化配置里$config['default']的cache，在浏览器里执行，已经可以存取了，在application/cache/my/文件下可以看到一个名为&#8221;name~~0&#8243;的文件，里面就是序列化的数据。</p>
<p>文件cache还是有一定的局限性，现在越来越的网站开始使用<a href="http://www.danga.com/memcached/" target="_blank">Memcached</a>所谓缓存的解决方案，Kohana的缓存驱动里，有Memcached的支持，但它的文档却没有给出Memcached的配置例子，看来要自己摸索一下。</p>
<p>将system/config下的cache_memcache.php复制到application/config下，cache_memcache.php的内容如下</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009933; font-style: italic;">/**
 * @package  Cache:Memcache
 *
 * memcache server configuration.
 */</span>
<span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'servers'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span>
<span style="color: #009900;">&#40;</span>
	<span style="color: #990000;">array</span>
	<span style="color: #009900;">&#40;</span>
		<span style="color: #0000ff;">'host'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'127.0.0.1'</span><span style="color: #339933;">,</span>
		<span style="color: #0000ff;">'port'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">11211</span><span style="color: #339933;">,</span>
		<span style="color: #0000ff;">'persistent'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">FALSE</span><span style="color: #339933;">,</span>
	<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009933; font-style: italic;">/**
 * Enable cache data compression.
 */</span>
<span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'compression'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">FALSE</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>根据你自己的情况修改Memcached的服务地址和端口，在application/config/cache.php里再加一段</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'mem'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span>
<span style="color: #009900;">&#40;</span>
	<span style="color: #0000ff;">'driver'</span>   <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'memcache'</span><span style="color: #339933;">,</span>
	<span style="color: #0000ff;">'params'</span>   <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">,</span>
	<span style="color: #0000ff;">'lifetime'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">1800</span><span style="color: #339933;">,</span>
	<span style="color: #0000ff;">'requests'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">1000</span>
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>在Controller里把Cache::instance(&#8220;my&#8221;)改为Cache::instance(&#8220;mem&#8221;)，运行看看结果，已经可以从Memcahced里存取了。</p>
<p>Kohana的Memcached驱动还是有些缺陷，现在只能使用一组Memcached，即$config['servers']这个参数，我觉得Memcacahed组也应该是多个，因为从业务角度会根据功能对cache做划分，我大概看了一下system/libraries/drivers/Cache/Memcache.php文件，应该是可以改造的，还有一点，编译PHP的时候要安装Memcached的支持。</p>
]]></content:encoded>
			<wfw:commentRss>http://i.laoer.com/kohana-cache-memcached.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Linux下Memcached安装事项</title>
		<link>http://i.laoer.com/linux-memcached-install.html</link>
		<comments>http://i.laoer.com/linux-memcached-install.html#comments</comments>
		<pubDate>Mon, 13 Apr 2009 01:47:00 +0000</pubDate>
		<dc:creator>Laoer</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Memcached]]></category>

		<guid isPermaLink="false">http://i.laoer.com/?p=269</guid>
		<description><![CDATA[在Linux下安装Memcached，先要安装libevent，在http://www.monkey.org/~provos/libevent/下载
Memcache在http://www.danga.com/memcached/download.bml下载
可能是我将libevent安装在/usr/local/libevent目录的缘故，在启动memchached时报一个错误
./memcached: error while loading shared libraries: libevent-1.4.so.2: cannot open shared object file: No such file or directory
我们先运行下面的命令，将libevent的lib目录加入LD_LIBRARY_PATH里
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/libevent/lib
之后再启动memcached就好了。
]]></description>
			<content:encoded><![CDATA[<p>在Linux下安装Memcached，先要安装libevent，在<a href="http://www.monkey.org/~provos/libevent/" target="_blank">http://www.monkey.org/~provos/libevent/</a>下载</p>
<p>Memcache在<a href="http://www.danga.com/memcached/download.bml" target="_blank">http://www.danga.com/memcached/download.bml</a>下载</p>
<p>可能是我将libevent安装在/usr/local/libevent目录的缘故，在启动memchached时报一个错误</p>
<p>./memcached: error while loading shared libraries: libevent-1.4.so.2: cannot open shared object file: No such file or directory</p>
<p>我们先运行下面的命令，将libevent的lib目录加入LD_LIBRARY_PATH里</p>
<p>export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/libevent/lib</p>
<p>之后再启动memcached就好了。</p>
]]></content:encoded>
			<wfw:commentRss>http://i.laoer.com/linux-memcached-install.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
