您的位置:首页 > 数据库 > Memcache

Thinkphp - 缓存的使用 (Memcache)

2016-04-11 09:08 399 查看

缓存方式

  File、Apachenote、Apc、Eaccelerator、Memcache、Shmop、Sqlite、Db、Redis和Xcache

缓存参数

  根据不同的缓存方式存在不同的参数

通用缓存参数 
expire 缓存有效期(默认由DATA_CACHE_TIME参数配置) 
length 缓存队列长度(默认为0) 
queue 缓存队列方式(默认为file 还支持xcache和apc)

Memcache

host 缓存服务器地址( 默认为127.0.0.1) 
port 端口(默认为MEMCACHE_PORT参数或者11211) 
timeout 缓存超时(默认由DATA_CACHE_TIME参数设置) 
persistent 长连接(默认为false)

File(文件缓存)

temp 缓存目录(默认由DATA_CACHE_PATH参数配置)

获取缓存实例

1. 使用配置文件方式(推荐)

config.php

<code class="hljs php has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-comment" style="color:#8800;box-sizing: border-box;">//缓存方式</span>
<span class="hljs-string" style="color:#0880;box-sizing: border-box;">'DATA_CACHE_TYPE'</span> => <span class="hljs-string" style="color:#0880;box-sizing: border-box;">'Memcache'</span>,
<span class="hljs-comment" style="color:#8800;box-sizing: border-box;">//v\ 缓存服务器地址</span>
<span class="hljs-string" style="color:#0880;box-sizing: border-box;">'MEMCACHE_HOST'</span>   => <span class="hljs-string" style="color:#0880;box-sizing: border-box;">'tcp://127.0.0.1:11211'</span>,
<span class="hljs-comment" style="color:#8800;box-sizing: border-box;">//指定默认的缓存时长为3600 秒,没有会出错</span>
<span class="hljs-string" style="color:#0880;box-sizing: border-box;">'DATA_CACHE_TIME'</span> => <span class="hljs-string" style="color:#0880;box-sizing: border-box;">'3600'</span>,</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li></ul>
<code class="hljs lasso has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-comment" style="color:#8800;box-sizing: border-box;">//获取缓存实例</span>
<span class="hljs-variable" style="color:#66066;box-sizing: border-box;">$cache</span> <span class="hljs-subst" style="color:#000000;box-sizing: border-box;">=</span> <span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">Cache</span><span class="hljs-tag" style="color:#06666;box-sizing: border-box;">::getInstance</span>();</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul>

2.使用代码的形式获取

<code class="hljs lasso has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-variable" style="color:#66066;box-sizing: border-box;">$Cache</span> <span class="hljs-subst" style="color:#000000;box-sizing: border-box;">=</span> <span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">Cache</span><span class="hljs-tag" style="color:#06666;box-sizing: border-box;">::getInstance</span>(<span class="hljs-string" style="color:#0880;box-sizing: border-box;">'缓存方式'</span>,<span class="hljs-string" style="color:#0880;box-sizing: border-box;">'缓存参数'</span>)
<span class="hljs-variable" style="color:#66066;box-sizing: border-box;">$Cache</span> <span class="hljs-subst" style="color:#000000;box-sizing: border-box;">=</span> <span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">Cache</span><span class="hljs-tag" style="color:#06666;box-sizing: border-box;">::getInstance</span>(<span class="hljs-string" style="color:#0880;box-sizing: border-box;">'Memcache'</span>,<span class="hljs-built_in" style="color:#66066;box-sizing: border-box;">array</span>(<span class="hljs-string" style="color:#0880;box-sizing: border-box;">'host'</span><span class="hljs-subst" style="color:#000000;box-sizing: border-box;">=></span><span class="hljs-string" style="color:#0880;box-sizing: border-box;">'127.0.0.1'</span>,<span class="hljs-string" style="color:#0880;box-sizing: border-box;">'port'</span><span class="hljs-subst" style="color:#000000;box-sizing: border-box;">=></span><span class="hljs-number" style="color:#06666;box-sizing: border-box;">11211</span>)));
<span class="hljs-variable" style="color:#66066;box-sizing: border-box;">$Cache</span><span class="hljs-subst" style="color:#000000;box-sizing: border-box;">-></span>setOptions(<span class="hljs-string" style="color:#0880;box-sizing: border-box;">'expire'</span>,<span class="hljs-number" style="color:#06666;box-sizing: border-box;">3600</span>);
<span class="hljs-variable" style="color:#66066;box-sizing: border-box;">$Cache</span><span class="hljs-subst" style="color:#000000;box-sizing: border-box;">-></span>setOptions(<span class="hljs-string" style="color:#0880;box-sizing: border-box;">'persistent'</span>,<span class="hljs-literal" style="color:#06666;box-sizing: border-box;">true</span>); </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li></ul>

存取缓存数据

缓存实例对象,快捷缓存方式

1.通过缓存实例对象进行操作

<code class="hljs lasso has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">    <span class="hljs-variable" style="color:#66066;box-sizing: border-box;">$Cache</span><span class="hljs-subst" style="color:#000000;box-sizing: border-box;">-></span><span class="hljs-built_in" style="color:#66066;box-sizing: border-box;">set</span>(<span class="hljs-string" style="color:#0880;box-sizing: border-box;">'name'</span>,<span class="hljs-string" style="color:#0880;box-sizing: border-box;">'ThinkPHP'</span>);  <span class="hljs-comment" style="color:#8800;box-sizing: border-box;">// 缓存name数据</span>
<span class="hljs-variable" style="color:#66066;box-sizing: border-box;">$value</span> <span class="hljs-subst" style="color:#000000;box-sizing: border-box;">=</span> <span class="hljs-variable" style="color:#66066;box-sizing: border-box;">$Cache</span><span class="hljs-subst" style="color:#000000;box-sizing: border-box;">-></span>get(<span class="hljs-string" style="color:#0880;box-sizing: border-box;">'name'</span>);  <span class="hljs-comment" style="color:#8800;box-sizing: border-box;">// 获取缓存的name数据</span>
<span class="hljs-variable" style="color:#66066;box-sizing: border-box;">$Cache</span><span class="hljs-subst" style="color:#000000;box-sizing: border-box;">-></span>rm(<span class="hljs-string" style="color:#0880;box-sizing: border-box;">'name'</span>);  <span class="hljs-comment" style="color:#8800;box-sizing: border-box;">// 删除缓存的name数据</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li></ul>

or

<code class="hljs lasso has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-variable" style="color:#66066;box-sizing: border-box;">$Cache</span><span class="hljs-subst" style="color:#000000;box-sizing: border-box;">-></span>name <span class="hljs-subst" style="color:#000000;box-sizing: border-box;">=</span> <span class="hljs-string" style="color:#0880;box-sizing: border-box;">'ThinkPHP'</span>;
<span class="hljs-variable" style="color:#66066;box-sizing: border-box;">$value</span> <span class="hljs-subst" style="color:#000000;box-sizing: border-box;">=</span> <span class="hljs-variable" style="color:#66066;box-sizing: border-box;">$Cache</span><span class="hljs-subst" style="color:#000000;box-sizing: border-box;">-></span>name;
Unset(<span class="hljs-variable" style="color:#66066;box-sizing: border-box;">$Cache</span><span class="hljs-subst" style="color:#000000;box-sizing: border-box;">-></span>name);</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li></ul>

2. 快捷缓存方式

使用快捷缓存方式,要求必须已经配置缓存方式

  为了进一步简化缓存存取操作,ThinkPHP把所有的缓存机制统一成一个S方法来进行操作,所以在使用不同的缓存方式的时候并不需要关注具体的缓存细节。

S方法

<code class="hljs php has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-comment" style="color:#8800;box-sizing: border-box;">// 使用data标识缓存$Data数据</span>
S(<span class="hljs-string" style="color:#0880;box-sizing: border-box;">'data'</span>,<span class="hljs-variable" style="color:#66066;box-sizing: border-box;">$Data</span>);
<span class="hljs-comment" style="color:#8800;box-sizing: border-box;">// 缓存$Data数据3600秒</span>
S(<span class="hljs-string" style="color:#0880;box-sizing: border-box;">'data'</span>,<span class="hljs-variable" style="color:#66066;box-sizing: border-box;">$Data</span>,<span class="hljs-number" style="color:#06666;box-sizing: border-box;">3600</span>);
<span class="hljs-comment" style="color:#8800;box-sizing: border-box;">// 获取缓存数据</span>
<span class="hljs-variable" style="color:#66066;box-sizing: border-box;">$Data</span> = S(<span class="hljs-string" style="color:#0880;box-sizing: border-box;">'data'</span>);
<span class="hljs-comment" style="color:#8800;box-sizing: border-box;">// 删除缓存数据</span>
S(<span class="hljs-string" style="color:#0880;box-sizing: border-box;">'data'</span>,<span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">NULL</span>);
</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li></ul>

cache方法

<code class="hljs lasso has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-variable" style="color:#66066;box-sizing: border-box;">$cache</span> <span class="hljs-subst" style="color:#000000;box-sizing: border-box;">=</span> <span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">cache</span>(<span class="hljs-built_in" style="color:#66066;box-sizing: border-box;">array</span>(<span class="hljs-string" style="color:#0880;box-sizing: border-box;">'type'</span><span class="hljs-subst" style="color:#000000;box-sizing: border-box;">=></span><span class="hljs-string" style="color:#0880;box-sizing: border-box;">'xcache'</span>,<span class="hljs-string" style="color:#0880;box-sizing: border-box;">'expire'</span><span class="hljs-subst" style="color:#000000;box-sizing: border-box;">=></span><span class="hljs-number" style="color:#06666;box-sizing: border-box;">60</span>));
<span class="hljs-variable" style="color:#66066;box-sizing: border-box;">$cache</span><span class="hljs-subst" style="color:#000000;box-sizing: border-box;">-></span><span class="hljs-built_in" style="color:#66066;box-sizing: border-box;">set</span>(<span class="hljs-string" style="color:#0880;box-sizing: border-box;">'name'</span>,<span class="hljs-variable" style="color:#66066;box-sizing: border-box;">$value</span>);
<span class="hljs-variable" style="color:#66066;box-sizing: border-box;">$cache</span><span class="hljs-subst" style="color:#000000;box-sizing: border-box;">-></span>get(<span class="hljs-string" style="color:#0880;box-sizing: border-box;">'name'</span>);
<span class="hljs-variable" style="color:#66066;box-sizing: border-box;">$cache</span><span class="hljs-subst" style="color:#000000;box-sizing: border-box;">-></span>rm(<span class="hljs-string" style="color:#0880;box-sizing: border-box;">'name'</span>);

<span class="hljs-literal" style="color:#06666;box-sizing: border-box;">or</span>

<span class="hljs-variable" style="color:#66066;box-sizing: border-box;">$cache</span> <span class="hljs-subst" style="color:#000000;box-sizing: border-box;">=</span> <span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">cache</span>(<span class="hljs-built_in" style="color:#66066;box-sizing: border-box;">array</span>(<span class="hljs-string" style="color:#0880;box-sizing: border-box;">'type'</span><span class="hljs-subst" style="color:#000000;box-sizing: border-box;">=></span><span class="hljs-string" style="color:#0880;box-sizing: border-box;">'xcache'</span>,<span class="hljs-string" style="color:#0880;box-sizing: border-box;">'expire'</span><span class="hljs-subst" style="color:#000000;box-sizing: border-box;">=></span><span class="hljs-number" style="color:#06666;box-sizing: border-box;">60</span>));
<span class="hljs-variable" style="color:#66066;box-sizing: border-box;">$cache</span><span class="hljs-subst" style="color:#000000;box-sizing: border-box;">-></span>name <span class="hljs-subst" style="color:#000000;box-sizing: border-box;">=</span> <span class="hljs-variable" style="color:#66066;box-sizing: border-box;">$value</span>;
echo <span class="hljs-variable" style="color:#66066;box-sizing: border-box;">$cache</span><span class="hljs-subst" style="color:#000000;box-sizing: border-box;">-></span>name;
unset(<span class="hljs-variable" style="color:#66066;box-sizing: border-box;">$cache</span><span class="hljs-subst" style="color:#000000;box-sizing: border-box;">-></span>name);
</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li></ul>

数据库缓存

1. 数据库查询缓存

对于及时性要求不高的数据查询,我们可以使用查询缓存功能来提高性能,而且无需自己使用缓存方法进行缓存和获取。

<code class="hljs lasso has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-variable" style="color:#66066;box-sizing: border-box;">$Model</span><span class="hljs-subst" style="color:#000000;box-sizing: border-box;">-></span><span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">cache</span>(<span class="hljs-literal" style="color:#06666;box-sizing: border-box;">true</span>)<span class="hljs-subst" style="color:#000000;box-sizing: border-box;">-></span><span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">select</span>();
<span class="hljs-variable" style="color:#66066;box-sizing: border-box;">$Model</span><span class="hljs-subst" style="color:#000000;box-sizing: border-box;">-></span><span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">cache</span>(<span class="hljs-string" style="color:#0880;box-sizing: border-box;">'cache_name'</span>,<span class="hljs-number" style="color:#06666;box-sizing: border-box;">60</span>)<span class="hljs-subst" style="color:#000000;box-sizing: border-box;">-></span><span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">select</span>();</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul>

2. SQL解析缓存

因为ThinkPHP的ORM机制,所有的SQL都是动态生成的,然后由数据库驱动执行。 

所以如果你的应用有大量的SQL查询需求,那么可以开启SQL解析缓存以减少SQL解析提高性能。

<code class="hljs php has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-string" style="color:#0880;box-sizing: border-box;">'DB_SQL_BUILD_QUEUE'</span> => <span class="hljs-string" style="color:#0880;box-sizing: border-box;">'xcache'</span>,</code>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  thinkphp