blob: 30a9fed2d5f9937bb18570b9dee54d59aad5d902 [file] [log] [blame]
Derek Jones8ede1a22011-10-05 13:34:52 -05001##############
2Caching Driver
3##############
4
5CodeIgniter features wrappers around some of the most popular forms of
6fast and dynamic caching. All but file-based caching require specific
7server requirements, and a Fatal Exception will be thrown if server
8requirements are not met.
9
Derek Jones9fe093e2013-07-21 13:47:08 -070010.. contents::
11 :local:
12
13.. raw:: html
14
15 <div class="custom-index container"></div>
Derek Jones8ede1a22011-10-05 13:34:52 -050016
17*************
18Example Usage
19*************
20
21The following example will load the cache driver, specify `APC <#apc>`_
22as the driver to use, and fall back to file-based caching if APC is not
23available in the hosting environment.
24
25::
26
27 $this->load->driver('cache', array('adapter' => 'apc', 'backup' => 'file'));
Derek Jonesca51e1a2013-07-21 13:35:02 -070028
Derek Jones8ede1a22011-10-05 13:34:52 -050029 if ( ! $foo = $this->cache->get('foo'))
30 {
31 echo 'Saving to the cache!<br />';
32 $foo = 'foobarbaz!';
Derek Jonesca51e1a2013-07-21 13:35:02 -070033
Derek Jones8ede1a22011-10-05 13:34:52 -050034 // Save into the cache for 5 minutes
35 $this->cache->save('foo', $foo, 300);
36 }
Derek Jonesca51e1a2013-07-21 13:35:02 -070037
Derek Jones8ede1a22011-10-05 13:34:52 -050038 echo $foo;
39
Andrey Andreev58c2b102012-10-26 14:42:29 +030040You can also prefix cache item names via the **key_prefix** setting, which is useful
41to avoid collisions when you're running multiple applications on the same environment.
42
43::
44
45 $this->load->driver('cache',
46 array('adapter' => 'apc', 'backup' => 'file', 'key_prefix' => 'my_')
47 );
48
49 $this->cache->get('foo'); // Will get the cache entry named 'my_foo'
50
Derek Jones9fe093e2013-07-21 13:47:08 -070051***************
52Class Reference
53***************
Derek Jones8ede1a22011-10-05 13:34:52 -050054
Derek Jonesca51e1a2013-07-21 13:35:02 -070055.. class:: CI_Cache
Derek Jones8ede1a22011-10-05 13:34:52 -050056
Andrey Andreevcc042092014-01-03 17:08:27 +020057 .. method:: is_supported($driver)
Derek Jones8ede1a22011-10-05 13:34:52 -050058
Derek Jones9fe093e2013-07-21 13:47:08 -070059 :param string $driver: the name of the caching driver
60 :returns: TRUE if supported, FALSE if not
Derek Jones9fe093e2013-07-21 13:47:08 -070061
Derek Jones9046f202013-07-21 13:54:19 -070062 This method is automatically called when accessing drivers via
Andrey Andreevcc042092014-01-03 17:08:27 +020063 ``$this->cache->get()``. However, if the individual drivers are used,
64 make sure to call this method to ensure the driver is supported in the
Derek Jones8ede1a22011-10-05 13:34:52 -050065 hosting environment.
Derek Jones8ede1a22011-10-05 13:34:52 -050066 ::
Derek Jonesca51e1a2013-07-21 13:35:02 -070067
Derek Jones8ede1a22011-10-05 13:34:52 -050068 if ($this->cache->apc->is_supported()
69 {
70 if ($data = $this->cache->apc->get('my_cache'))
71 {
72 // do things.
73 }
74 }
75
Andrey Andreevcc042092014-01-03 17:08:27 +020076 .. method:: get($id)
Derek Jonesca51e1a2013-07-21 13:35:02 -070077
Derek Jones8ede1a22011-10-05 13:34:52 -050078 :param string $id: name of cached item
79 :returns: The item if it exists, FALSE if it does not
Derek Jonesca51e1a2013-07-21 13:35:02 -070080
Derek Jones9046f202013-07-21 13:54:19 -070081 This method will attempt to fetch an item from the cache store. If the
82 item does not exist, the method will return FALSE.
Derek Jones8ede1a22011-10-05 13:34:52 -050083 ::
84
85 $foo = $this->cache->get('my_cached_item');
86
Andrey Andreevd0bc7eb2014-01-09 17:37:06 +020087 .. method:: save($id, $data[, $ttl = 60[, $raw = FALSE]])
Derek Jones8ede1a22011-10-05 13:34:52 -050088
89 :param string $id: name of the cached item
90 :param mixed $data: the data to save
91 :param int $ttl: Time To Live, in seconds (default 60)
Andrey Andreevd0bc7eb2014-01-09 17:37:06 +020092 :param bool $raw: Whether to store the raw value
Derek Jones8ede1a22011-10-05 13:34:52 -050093 :returns: TRUE on success, FALSE on failure
Derek Jones8ede1a22011-10-05 13:34:52 -050094
Derek Jones9046f202013-07-21 13:54:19 -070095 This method will save an item to the cache store. If saving fails, the
96 method will return FALSE.
Derek Jones8ede1a22011-10-05 13:34:52 -050097 ::
98
99 $this->cache->save('cache_item_id', 'data_to_cache');
Derek Jonesca51e1a2013-07-21 13:35:02 -0700100
Andrey Andreevd0bc7eb2014-01-09 17:37:06 +0200101 .. note:: The ``$raw`` parameter is only utilized by APC and Memcache,
102 in order to allow usage of ``increment()`` and ``decrement()``.
103
Andrey Andreevcc042092014-01-03 17:08:27 +0200104 .. method:: delete($id)
Derek Jonesca51e1a2013-07-21 13:35:02 -0700105
Derek Jones8ede1a22011-10-05 13:34:52 -0500106 :param string $id: name of cached item
107 :returns: TRUE if deleted, FALSE if the deletion fails
Derek Jonesca51e1a2013-07-21 13:35:02 -0700108
Derek Jones9046f202013-07-21 13:54:19 -0700109 This method will delete a specific item from the cache store. If item
110 deletion fails, the method will return FALSE.
Derek Jones8ede1a22011-10-05 13:34:52 -0500111 ::
112
113 $this->cache->delete('cache_item_id');
114
Andrey Andreevd0bc7eb2014-01-09 17:37:06 +0200115 .. method:: increment($id[, $offset = 1])
116
117 :param string $id: Cache ID
118 :param int $offset: Step/value to add
119 :returns: New value on success, FALSE on failure
120
121 Performs atomic incrementation of a raw stored value.
122 ::
123
124 // 'iterator' has a value of 2
125
126 $this->cache->increment('iterator'); // 'iterator' is now 3
127
128 $this->cache->increment('iterator', 3); // 'iterator' is now 6
129
130 .. method:: decrement($id[, $offset = 1])
131
132 :param string $id: Cache ID
133 :param int $offset: Step/value to reduce by
134 :returns: New value on success, FALSE on failure
135
136 Performs atomic decrementation of a raw stored value.
137 ::
138
139 // 'iterator' has a value of 6
140
141 $this->cache->decrement('iterator'); // 'iterator' is now 5
142
143 $this->cache->decrement('iterator', 2); // 'iterator' is now 3
144
Andrey Andreevcc042092014-01-03 17:08:27 +0200145 .. method:: clean()
Derek Jonesca51e1a2013-07-21 13:35:02 -0700146
Derek Jones8ede1a22011-10-05 13:34:52 -0500147 :returns: TRUE if deleted, FALSE if the deletion fails
Derek Jonesca51e1a2013-07-21 13:35:02 -0700148
Derek Jones9046f202013-07-21 13:54:19 -0700149 This method will 'clean' the entire cache. If the deletion of the
150 cache files fails, the method will return FALSE.
Derek Jones8ede1a22011-10-05 13:34:52 -0500151 ::
152
153 $this->cache->clean();
154
Andrey Andreevcc042092014-01-03 17:08:27 +0200155 .. method:: cache_info()
Derek Jones8ede1a22011-10-05 13:34:52 -0500156
Derek Jones8ede1a22011-10-05 13:34:52 -0500157 :returns: information on the entire cache
Derek Jonesca51e1a2013-07-21 13:35:02 -0700158
Derek Jones9046f202013-07-21 13:54:19 -0700159 This method will return information on the entire cache.
Derek Jones8ede1a22011-10-05 13:34:52 -0500160 ::
161
162 var_dump($this->cache->cache_info());
Derek Jonesca51e1a2013-07-21 13:35:02 -0700163
Derek Jones8ede1a22011-10-05 13:34:52 -0500164 .. note:: The information returned and the structure of the data is dependent
165 on which adapter is being used.
Derek Jonesca51e1a2013-07-21 13:35:02 -0700166
Andrey Andreevcc042092014-01-03 17:08:27 +0200167 .. method:: get_metadata($id)
Derek Jonesca51e1a2013-07-21 13:35:02 -0700168
Derek Jones8ede1a22011-10-05 13:34:52 -0500169 :param string $id: name of cached item
170 :returns: metadadta for the cached item
Derek Jonesca51e1a2013-07-21 13:35:02 -0700171
Derek Jones9046f202013-07-21 13:54:19 -0700172 This method will return detailed information on a specific item in the
Derek Jones9fe093e2013-07-21 13:47:08 -0700173 cache.
Derek Jones8ede1a22011-10-05 13:34:52 -0500174 ::
175
176 var_dump($this->cache->get_metadata('my_cached_item'));
177
178 .. note:: The information returned and the structure of the data is dependent
179 on which adapter is being used.
180
Derek Jones8ede1a22011-10-05 13:34:52 -0500181*******
182Drivers
183*******
184
185Alternative PHP Cache (APC) Caching
186===================================
187
Derek Jones9046f202013-07-21 13:54:19 -0700188All of the methods listed above can be accessed without passing a
Derek Jones8ede1a22011-10-05 13:34:52 -0500189specific adapter to the driver loader as follows::
190
191 $this->load->driver('cache');
192 $this->cache->apc->save('foo', 'bar', 10);
193
194For more information on APC, please see
Andrey Andreev58c2b102012-10-26 14:42:29 +0300195`http://php.net/apc <http://php.net/apc>`_.
Derek Jones8ede1a22011-10-05 13:34:52 -0500196
197File-based Caching
198==================
199
200Unlike caching from the Output Class, the driver file-based caching
201allows for pieces of view files to be cached. Use this with care, and
202make sure to benchmark your application, as a point can come where disk
203I/O will negate positive gains by caching.
204
Derek Jones9046f202013-07-21 13:54:19 -0700205All of the methods listed above can be accessed without passing a
Derek Jones8ede1a22011-10-05 13:34:52 -0500206specific adapter to the driver loader as follows::
207
208 $this->load->driver('cache');
209 $this->cache->file->save('foo', 'bar', 10);
210
211Memcached Caching
212=================
213
214Multiple Memcached servers can be specified in the memcached.php
Andrey Andreev58c2b102012-10-26 14:42:29 +0300215configuration file, located in the _application/config/* directory.
Derek Jones8ede1a22011-10-05 13:34:52 -0500216
Andrey Andreev58c2b102012-10-26 14:42:29 +0300217All of the methods listed above can be accessed without passing a
Derek Jones8ede1a22011-10-05 13:34:52 -0500218specific adapter to the driver loader as follows::
219
220 $this->load->driver('cache');
221 $this->cache->memcached->save('foo', 'bar', 10);
222
223For more information on Memcached, please see
Andrey Andreev58c2b102012-10-26 14:42:29 +0300224`http://php.net/memcached <http://php.net/memcached>`_.
225
226WinCache Caching
227================
228
229Under Windows, you can also utilize the WinCache driver.
230
Derek Jones9046f202013-07-21 13:54:19 -0700231All of the methods listed above can be accessed without passing a
Andrey Andreev58c2b102012-10-26 14:42:29 +0300232specific adapter to the driver loader as follows::
233
234 $this->load->driver('cache');
235 $this->cache->wincache->save('foo', 'bar', 10);
236
237For more information on WinCache, please see
238`http://php.net/wincache <http://php.net/wincache>`_.
239
240Redis Caching
241=============
242
kakyshac6fc0c82013-10-28 23:01:08 +0300243Redis is an in-memory key-value store which can operate in LRU cache mode.
kakysha34565a72013-10-29 02:59:30 +0300244To use it, you need Redis server and phpredis PHP extension
kakyshac6fc0c82013-10-28 23:01:08 +0300245`https://github.com/nicolasff/phpredis <https://github.com/nicolasff/phpredis>`_.
246
247Config options to connect to redis server must be stored in the application/config/redis.php file.
248Available options are::
249
250 $config['socket_type'] = 'tcp'; //`tcp` or `unix`
251 $config['socket'] = '/var/run/redis.sock'; // in case of `unix` socket type
252 $config['host'] = '127.0.0.1';
253 $config['password'] = NULL;
254 $config['port'] = 6379;
255 $config['timeout'] = 0;
256
Andrey Andreev58c2b102012-10-26 14:42:29 +0300257All of the methods listed above can be accessed without passing a
258specific adapter to the driver loader as follows::
259
260 $this->load->driver('cache');
261 $this->cache->redis->save('foo', 'bar', 10);
262
kakyshac6fc0c82013-10-28 23:01:08 +0300263For more information on Redis, please see
264`http://redis.io <http://redis.io>`_.
Derek Jones8ede1a22011-10-05 13:34:52 -0500265
266Dummy Cache
267===========
268
269This is a caching backend that will always 'miss.' It stores no data,
270but lets you keep your caching code in place in environments that don't
Andrey Andreev58c2b102012-10-26 14:42:29 +0300271support your chosen cache.