blob: bc1cd0d829964d39dd4ef3e6075737071f644efa [file] [log] [blame]
admin43a823e2006-09-27 01:57:10 +00001<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Derek Allardafd99ac2008-01-19 19:59:14 +00002<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
admin43a823e2006-09-27 01:57:10 +00003<head>
4
Derek Jonesfd93d222008-05-06 15:18:50 +00005<title>Database Caching Class : CodeIgniter User Guide</title>
admin43a823e2006-09-27 01:57:10 +00006
7<style type='text/css' media='all'>@import url('../userguide.css');</style>
8<link rel='stylesheet' type='text/css' media='all' href='../userguide.css' />
9
admin17a890d2006-09-27 20:42:42 +000010<script type="text/javascript" src="../nav/nav.js"></script>
admin2296fc32006-09-27 21:07:02 +000011<script type="text/javascript" src="../nav/prototype.lite.js"></script>
admin17a890d2006-09-27 20:42:42 +000012<script type="text/javascript" src="../nav/moo.fx.js"></script>
Derek Allardb3412372007-10-25 12:15:16 +000013<script type="text/javascript" src="../nav/user_guide_menu.js"></script>
admin43a823e2006-09-27 01:57:10 +000014
15<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
16<meta http-equiv='expires' content='-1' />
17<meta http-equiv= 'pragma' content='no-cache' />
18<meta name='robots' content='all' />
Derek Allard3d879d52008-01-18 19:41:32 +000019<meta name='author' content='ExpressionEngine Dev Team' />
Derek Allardd2df9bc2007-04-15 17:41:17 +000020<meta name='description' content='CodeIgniter User Guide' />
admin43a823e2006-09-27 01:57:10 +000021
22</head>
23<body>
24
25<!-- START NAVIGATION -->
26<div id="nav"><div id="nav_inner"><script type="text/javascript">create_menu('../');</script></div></div>
27<div id="nav2"><a name="top"></a><a href="javascript:void(0);" onclick="myHeight.toggle();"><img src="../images/nav_toggle.jpg" width="153" height="44" border="0" title="Toggle Table of Contents" alt="Toggle Table of Contents" /></a></div>
28<div id="masthead">
29<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
30<tr>
Derek Jones6b7b11f2008-05-06 16:07:27 +000031<td><h1>CodeIgniter User Guide Version 1.6.2</h1></td>
adminc0d5d522006-10-30 19:40:35 +000032<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
admin43a823e2006-09-27 01:57:10 +000033</tr>
34</table>
35</div>
36<!-- END NAVIGATION -->
37
38
39<!-- START BREADCRUMB -->
40<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
41<tr>
42<td id="breadcrumb">
Derek Jones7a9193a2008-01-21 18:39:20 +000043<a href="http://codeigniter.com/">CodeIgniter Home</a> &nbsp;&#8250;&nbsp;
admin43a823e2006-09-27 01:57:10 +000044<a href="../index.html">User Guide Home</a> &nbsp;&#8250;&nbsp;
45<a href="index.html">Database Library</a> &nbsp;&#8250;&nbsp;
46Database Caching Class
47</td>
Derek Allardbc030912007-06-24 18:25:29 +000048<td id="searchbox"><form method="get" action="http://www.google.com/search"><input type="hidden" name="as_sitesearch" id="as_sitesearch" value="codeigniter.com/user_guide/" />Search User Guide&nbsp; <input type="text" class="input" style="width:200px;" name="q" id="q" size="31" maxlength="255" value="" />&nbsp;<input type="submit" class="submit" name="sa" value="Go" /></form></td>
admin43a823e2006-09-27 01:57:10 +000049</tr>
50</table>
51<!-- END BREADCRUMB -->
52
53
54<br clear="all" />
55
56
57<!-- START CONTENT -->
58<div id="content">
59
60<h1>Database Caching Class</h1>
61
admin5294f4f2006-10-06 02:10:05 +000062<p>The Database Caching Class permits you to cache your queries as text files for reduced database load.</p>
admin43a823e2006-09-27 01:57:10 +000063
admin5ffba1e2006-10-05 04:23:18 +000064<p class="important"><strong>Important:</strong>&nbsp; This class is initialized automatically by the database driver
admin5294f4f2006-10-06 02:10:05 +000065when caching is enabled. Do NOT load this class manually.<br /><br />
admin43a823e2006-09-27 01:57:10 +000066
admin5294f4f2006-10-06 02:10:05 +000067<strong>Also note:</strong>&nbsp; Not all query result functions are available when you use caching. Please read this page carefully.</p>
admin43a823e2006-09-27 01:57:10 +000068
admin11c06c72006-10-05 05:12:27 +000069<h2>Enabling Caching</h2>
70
admin5294f4f2006-10-06 02:10:05 +000071<p>Caching is enabled in three steps:</p>
admin11c06c72006-10-05 05:12:27 +000072
73<ul>
admin5294f4f2006-10-06 02:10:05 +000074<li>Create a writable directory on your server where the cache files can be stored.</li>
75<li>Set the path to your cache folder in your <dfn>application/config/database.php</dfn> file.</li>
76<li>Enable the caching feature, either globally by setting the preference in your <dfn>application/config/database.php</dfn> file, or manually as described below.</li>
admin11c06c72006-10-05 05:12:27 +000077</ul>
admin43a823e2006-09-27 01:57:10 +000078
adminadb899a2006-10-10 23:11:33 +000079<p>Once enabled, caching will happen automatically whenever a page is loaded that contains database queries.</p>
admin0a35e3d2006-10-06 06:05:02 +000080
admin43a823e2006-09-27 01:57:10 +000081
admin5294f4f2006-10-06 02:10:05 +000082<h2>How Does Caching Work?</h2>
adminf3428b52006-10-05 05:19:15 +000083
Derek Allardd2df9bc2007-04-15 17:41:17 +000084<p>CodeIgniter's query caching system happens dynamically when your pages are viewed.
admin0a35e3d2006-10-06 06:05:02 +000085When caching is enabled, the first time a web page is loaded, the query result object will
admin5294f4f2006-10-06 02:10:05 +000086be serialized and stored in a text file on your server. The next time the page is loaded the cache file will be used instead of
87accessing your database. Your database usage can effectively be reduced to zero for any pages that have been cached.</p>
adminf3428b52006-10-05 05:19:15 +000088
admine334c472006-10-21 19:44:22 +000089<p>Only <dfn>read-type</dfn> (SELECT) queries can be cached, since these are the only type of queries that produce a result.
admin5294f4f2006-10-06 02:10:05 +000090<dfn>Write-type</dfn> (INSERT, UPDATE, etc.) queries, since they don't generate a result, will not be cached by the system.</p>
adminf3428b52006-10-05 05:19:15 +000091
admine334c472006-10-21 19:44:22 +000092<p>Cache files DO NOT expire. Any queries that have been cached will remain cached until you delete them. The caching system
93permits you clear caches associated with individual pages, or you can delete the entire collection of cache files.
admin0a35e3d2006-10-06 06:05:02 +000094Typically you'll to use the housekeeping functions described below to delete cache files after certain
95events take place, like when you've added new information to your database.</p>
adminf3428b52006-10-05 05:19:15 +000096
admin5294f4f2006-10-06 02:10:05 +000097<h2>Will Caching Improve Your Site's Performance?</h2>
98
admine334c472006-10-21 19:44:22 +000099<p>Getting a performance gain as a result of caching depends on many factors.
admin0a35e3d2006-10-06 06:05:02 +0000100If you have a highly optimized database under very little load, you probably won't see a performance boost.
admine334c472006-10-21 19:44:22 +0000101If your database is under heavy use you probably will see an improved response, assuming your file-system is not
admin0a35e3d2006-10-06 06:05:02 +0000102overly taxed. Remember that caching simply changes how your information is retrieved, shifting it from being a database
adminadb899a2006-10-10 23:11:33 +0000103operation to a file-system one.</p>
admin5294f4f2006-10-06 02:10:05 +0000104
adminadb899a2006-10-10 23:11:33 +0000105<p>In some clustered server environments, for example, caching may be detrimental since file-system operations are so intense.
admin0a35e3d2006-10-06 06:05:02 +0000106On single servers in shared environments, caching will probably be beneficial. Unfortunately there is no
admin5294f4f2006-10-06 02:10:05 +0000107single answer to the question of whether you should cache your database. It really depends on your situation.</p>
108
109<h2>How are Cache Files Stored?</h2>
110
Derek Allardd2df9bc2007-04-15 17:41:17 +0000111<p>CodeIgniter places the result of EACH query into its own cache file. Sets of cache files are further organized into
admin0a35e3d2006-10-06 06:05:02 +0000112sub-folders corresponding to your controller functions. To be precise, the sub-folders are named identically to the
113first two segments of your URI (the controller class name and function name).</p>
admin5294f4f2006-10-06 02:10:05 +0000114
115<p>For example, let's say you have a controller called <dfn>blog</dfn> with a function called <dfn>comments</dfn> that
admine334c472006-10-21 19:44:22 +0000116contains three queries. The caching system will create a cache folder
adminadb899a2006-10-10 23:11:33 +0000117called <kbd>blog+comments</kbd>, into which it will write three cache files.</p>
admin5294f4f2006-10-06 02:10:05 +0000118
admin0a35e3d2006-10-06 06:05:02 +0000119<p>If you use dynamic queries that change based on information in your URI (when using pagination, for example), each instance of
admine334c472006-10-21 19:44:22 +0000120the query will produce its own cache file. It's possible, therefore, to end up with many times more cache files than you have
admin5294f4f2006-10-06 02:10:05 +0000121queries.</p>
adminf3428b52006-10-05 05:19:15 +0000122
123
admin5294f4f2006-10-06 02:10:05 +0000124<h2>Managing your Cache Files</h2>
125
126<p>Since cache files do not expire, you'll need to build deletion routines into your application. For example, let's say you have a blog
admine334c472006-10-21 19:44:22 +0000127that allows user commenting. Whenever a new comment is submitted you'll want to delete the cache files associated with the
128controller function that serves up your comments. You'll find two delete functions described below that help you
admin5294f4f2006-10-06 02:10:05 +0000129clear data.</p>
adminf3428b52006-10-05 05:19:15 +0000130
131
admin0a35e3d2006-10-06 06:05:02 +0000132<h2>Not All Database Functions Work with Caching</h2>
133
134<p>Lastly, we need to point out that the result object that is cached is a simplified version of the full result object. For that reason,
135some of the query result functions are not available for use.</p>
136
137<p>The following functions <kbd>ARE NOT</kbd> available when using a cached result object:</p>
138
139<ul>
140<li>num_fields()</li>
141<li>field_names()</li>
142<li>field_data()</li>
143<li>free_result()</li>
144</ul>
145
146<p>Also, the two database resources (result_id and conn_id) are not available when caching, since result resources only
147pertain to run-time operations.</p>
148
149
150<br />
151
admin5294f4f2006-10-06 02:10:05 +0000152<h1>Function Reference</h1>
adminf3428b52006-10-05 05:19:15 +0000153
154
155
adminadb899a2006-10-10 23:11:33 +0000156<h2>$this->db->cache_on()&nbsp; / &nbsp; $this->db->cache_off()</h2>
157
158<p>Manually enables/disables caching. This can be useful if you want to
159keep certain queries from being cached. Example:</p>
160
161<code>
162// Turn caching on<br />
163$this->db->cache_on();<br />
164$query = $this->db->query("SELECT * FROM mytable");<br />
165<br />
166// Turn caching off for this one query<br />
167$this->db->cache_off();<br />
168$query = $this->db->query("SELECT * FROM members WHERE member_id = '$current_user'");<br />
169<br />
170// Turn caching back on<br />
171$this->db->cache_on();<br />
172$query = $this->db->query("SELECT * FROM another_table");
173</code>
adminf3428b52006-10-05 05:19:15 +0000174
175
adminadb899a2006-10-10 23:11:33 +0000176<h2>$this->db->cache_delete()</h2>
177
178<p>Deletes the cache files associated with a particular page. This is useful if you need to clear caching after you update your database.</p>
179
180<p>The caching system saves your cache files to folders that correspond to the URI of the page you are viewing. For example, if you are viewing
181a page at <dfn>www.your-site.com/index.php/blog/comments</dfn>, the caching system will put all cache files associated with it in a folder
182called <dfn>blog+comments</dfn>. To delete those particular cache files you will use:</p>
183
184<code>$this->db->cache_delete('blog', 'comments');</code>
185
186<p>If you do not use any parameters the current URI will be used when determining what should be cleared.</p>
187
188
189<h2>$this->db->cache_delete_all()</h2>
190
191<p>Clears all existing cache files. Example:</p>
192
193<code>$this->db->cache_delete_all();</code>
adminf3428b52006-10-05 05:19:15 +0000194
195
196
197
198
199
200
201
admin43a823e2006-09-27 01:57:10 +0000202
203
204</div>
205<!-- END CONTENT -->
206
207
208<div id="footer">
209<p>
210Previous Topic:&nbsp;&nbsp;<a href="call_function.html">Custom Function Calls</a>
211&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
212<a href="#top">Top of Page</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
213<a href="../index.html">User Guide Home</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
Rick Ellis325197e2006-11-20 17:29:05 +0000214Next Topic:&nbsp;&nbsp;<a href="utilities.html">Database Utilities Class</a>
Derek Allardc6441282007-07-04 23:54:32 +0000215</p>
Derek Jones07870432008-02-13 03:49:26 +0000216<p><a href="http://codeigniter.com">CodeIgniter</a> &nbsp;&middot;&nbsp; Copyright &#169; 2006-2008 &nbsp;&middot;&nbsp; <a href="http://ellislab.com/">Ellislab, Inc.</a></p>
admin43a823e2006-09-27 01:57:10 +0000217</div>
218
219</body>
220</html>