blob: caece1aeea47df995e4b66cad6754790ec75765c [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
Andrey Andreev28c2c972014-02-08 04:27:48 +020059 :param string $driver: the name of the caching driver
60 :returns: TRUE if supported, FALSE if not
61 :rtype: bool
Derek Jones9fe093e2013-07-21 13:47:08 -070062
Derek Jones9046f202013-07-21 13:54:19 -070063 This method is automatically called when accessing drivers via
Andrey Andreevcc042092014-01-03 17:08:27 +020064 ``$this->cache->get()``. However, if the individual drivers are used,
65 make sure to call this method to ensure the driver is supported in the
Derek Jones8ede1a22011-10-05 13:34:52 -050066 hosting environment.
Derek Jones8ede1a22011-10-05 13:34:52 -050067 ::
Derek Jonesca51e1a2013-07-21 13:35:02 -070068
Derek Jones8ede1a22011-10-05 13:34:52 -050069 if ($this->cache->apc->is_supported()
70 {
71 if ($data = $this->cache->apc->get('my_cache'))
72 {
73 // do things.
74 }
75 }
76
Andrey Andreevcc042092014-01-03 17:08:27 +020077 .. method:: get($id)
Derek Jonesca51e1a2013-07-21 13:35:02 -070078
Andrey Andreev28c2c972014-02-08 04:27:48 +020079 :param string $id: Cache item name
80 :returns: Item value or FALSE if not found
81 :rtype: mixed
Derek Jonesca51e1a2013-07-21 13:35:02 -070082
Derek Jones9046f202013-07-21 13:54:19 -070083 This method will attempt to fetch an item from the cache store. If the
84 item does not exist, the method will return FALSE.
Derek Jones8ede1a22011-10-05 13:34:52 -050085 ::
86
87 $foo = $this->cache->get('my_cached_item');
88
Andrey Andreevd0bc7eb2014-01-09 17:37:06 +020089 .. method:: save($id, $data[, $ttl = 60[, $raw = FALSE]])
Derek Jones8ede1a22011-10-05 13:34:52 -050090
Andrey Andreev28c2c972014-02-08 04:27:48 +020091 :param string $id: Cache item name
92 :param mixed $data: the data to save
93 :param int $ttl: Time To Live, in seconds (default 60)
94 :param bool $raw: Whether to store the raw value
95 :returns: TRUE on success, FALSE on failure
96 :rtype: string
Derek Jones8ede1a22011-10-05 13:34:52 -050097
Derek Jones9046f202013-07-21 13:54:19 -070098 This method will save an item to the cache store. If saving fails, the
99 method will return FALSE.
Derek Jones8ede1a22011-10-05 13:34:52 -0500100 ::
101
102 $this->cache->save('cache_item_id', 'data_to_cache');
Derek Jonesca51e1a2013-07-21 13:35:02 -0700103
Andrey Andreevd0bc7eb2014-01-09 17:37:06 +0200104 .. note:: The ``$raw`` parameter is only utilized by APC and Memcache,
105 in order to allow usage of ``increment()`` and ``decrement()``.
106
Andrey Andreevcc042092014-01-03 17:08:27 +0200107 .. method:: delete($id)
Derek Jonesca51e1a2013-07-21 13:35:02 -0700108
Andrey Andreev28c2c972014-02-08 04:27:48 +0200109 :param string $id: name of cached item
110 :returns: TRUE on success, FALSE on failure
111 :rtype: bool
Derek Jonesca51e1a2013-07-21 13:35:02 -0700112
Derek Jones9046f202013-07-21 13:54:19 -0700113 This method will delete a specific item from the cache store. If item
114 deletion fails, the method will return FALSE.
Derek Jones8ede1a22011-10-05 13:34:52 -0500115 ::
116
117 $this->cache->delete('cache_item_id');
118
Andrey Andreevd0bc7eb2014-01-09 17:37:06 +0200119 .. method:: increment($id[, $offset = 1])
120
Andrey Andreev28c2c972014-02-08 04:27:48 +0200121 :param string $id: Cache ID
122 :param int $offset: Step/value to add
123 :returns: New value on success, FALSE on failure
124 :rtype: mixed
Andrey Andreevd0bc7eb2014-01-09 17:37:06 +0200125
126 Performs atomic incrementation of a raw stored value.
127 ::
128
129 // 'iterator' has a value of 2
130
131 $this->cache->increment('iterator'); // 'iterator' is now 3
132
133 $this->cache->increment('iterator', 3); // 'iterator' is now 6
134
135 .. method:: decrement($id[, $offset = 1])
136
Andrey Andreev28c2c972014-02-08 04:27:48 +0200137 :param string $id: Cache ID
138 :param int $offset: Step/value to reduce by
139 :returns: New value on success, FALSE on failure
140 :rtype: mixed
Andrey Andreevd0bc7eb2014-01-09 17:37:06 +0200141
142 Performs atomic decrementation of a raw stored value.
143 ::
144
145 // 'iterator' has a value of 6
146
147 $this->cache->decrement('iterator'); // 'iterator' is now 5
148
149 $this->cache->decrement('iterator', 2); // 'iterator' is now 3
150
Andrey Andreevcc042092014-01-03 17:08:27 +0200151 .. method:: clean()
Derek Jonesca51e1a2013-07-21 13:35:02 -0700152
Andrey Andreev28c2c972014-02-08 04:27:48 +0200153 :returns: TRUE on success, FALSE on failure
154 :rtype: bool
Derek Jonesca51e1a2013-07-21 13:35:02 -0700155
Derek Jones9046f202013-07-21 13:54:19 -0700156 This method will 'clean' the entire cache. If the deletion of the
157 cache files fails, the method will return FALSE.
Derek Jones8ede1a22011-10-05 13:34:52 -0500158 ::
159
160 $this->cache->clean();
161
Andrey Andreevcc042092014-01-03 17:08:27 +0200162 .. method:: cache_info()
Derek Jones8ede1a22011-10-05 13:34:52 -0500163
Andrey Andreev28c2c972014-02-08 04:27:48 +0200164 :returns: Information on the entire cache database
165 :rtype: mixed
Derek Jonesca51e1a2013-07-21 13:35:02 -0700166
Derek Jones9046f202013-07-21 13:54:19 -0700167 This method will return information on the entire cache.
Derek Jones8ede1a22011-10-05 13:34:52 -0500168 ::
169
170 var_dump($this->cache->cache_info());
Derek Jonesca51e1a2013-07-21 13:35:02 -0700171
Derek Jones8ede1a22011-10-05 13:34:52 -0500172 .. note:: The information returned and the structure of the data is dependent
173 on which adapter is being used.
Derek Jonesca51e1a2013-07-21 13:35:02 -0700174
Andrey Andreevcc042092014-01-03 17:08:27 +0200175 .. method:: get_metadata($id)
Derek Jonesca51e1a2013-07-21 13:35:02 -0700176
Andrey Andreev28c2c972014-02-08 04:27:48 +0200177 :param string $id: Cache item name
178 :returns: Metadata for the cached item
179 :rtype: mixed
Derek Jonesca51e1a2013-07-21 13:35:02 -0700180
Derek Jones9046f202013-07-21 13:54:19 -0700181 This method will return detailed information on a specific item in the
Derek Jones9fe093e2013-07-21 13:47:08 -0700182 cache.
Derek Jones8ede1a22011-10-05 13:34:52 -0500183 ::
184
185 var_dump($this->cache->get_metadata('my_cached_item'));
186
187 .. note:: The information returned and the structure of the data is dependent
188 on which adapter is being used.
189
Derek Jones8ede1a22011-10-05 13:34:52 -0500190*******
191Drivers
192*******
193
194Alternative PHP Cache (APC) Caching
195===================================
196
Derek Jones9046f202013-07-21 13:54:19 -0700197All of the methods listed above can be accessed without passing a
Derek Jones8ede1a22011-10-05 13:34:52 -0500198specific adapter to the driver loader as follows::
199
200 $this->load->driver('cache');
201 $this->cache->apc->save('foo', 'bar', 10);
202
203For more information on APC, please see
Andrey Andreev58c2b102012-10-26 14:42:29 +0300204`http://php.net/apc <http://php.net/apc>`_.
Derek Jones8ede1a22011-10-05 13:34:52 -0500205
206File-based Caching
207==================
208
209Unlike caching from the Output Class, the driver file-based caching
210allows for pieces of view files to be cached. Use this with care, and
211make sure to benchmark your application, as a point can come where disk
212I/O will negate positive gains by caching.
213
Derek Jones9046f202013-07-21 13:54:19 -0700214All of the methods listed above can be accessed without passing a
Derek Jones8ede1a22011-10-05 13:34:52 -0500215specific adapter to the driver loader as follows::
216
217 $this->load->driver('cache');
218 $this->cache->file->save('foo', 'bar', 10);
219
220Memcached Caching
221=================
222
223Multiple Memcached servers can be specified in the memcached.php
Andrey Andreev58c2b102012-10-26 14:42:29 +0300224configuration file, located in the _application/config/* directory.
Derek Jones8ede1a22011-10-05 13:34:52 -0500225
Andrey Andreev58c2b102012-10-26 14:42:29 +0300226All of the methods listed above can be accessed without passing a
Derek Jones8ede1a22011-10-05 13:34:52 -0500227specific adapter to the driver loader as follows::
228
229 $this->load->driver('cache');
230 $this->cache->memcached->save('foo', 'bar', 10);
231
232For more information on Memcached, please see
Andrey Andreev58c2b102012-10-26 14:42:29 +0300233`http://php.net/memcached <http://php.net/memcached>`_.
234
235WinCache Caching
236================
237
238Under Windows, you can also utilize the WinCache driver.
239
Derek Jones9046f202013-07-21 13:54:19 -0700240All of the methods listed above can be accessed without passing a
Andrey Andreev58c2b102012-10-26 14:42:29 +0300241specific adapter to the driver loader as follows::
242
243 $this->load->driver('cache');
244 $this->cache->wincache->save('foo', 'bar', 10);
245
246For more information on WinCache, please see
247`http://php.net/wincache <http://php.net/wincache>`_.
248
249Redis Caching
250=============
251
kakyshac6fc0c82013-10-28 23:01:08 +0300252Redis is an in-memory key-value store which can operate in LRU cache mode.
kakysha34565a72013-10-29 02:59:30 +0300253To use it, you need Redis server and phpredis PHP extension
kakyshac6fc0c82013-10-28 23:01:08 +0300254`https://github.com/nicolasff/phpredis <https://github.com/nicolasff/phpredis>`_.
255
256Config options to connect to redis server must be stored in the application/config/redis.php file.
257Available options are::
258
259 $config['socket_type'] = 'tcp'; //`tcp` or `unix`
260 $config['socket'] = '/var/run/redis.sock'; // in case of `unix` socket type
261 $config['host'] = '127.0.0.1';
262 $config['password'] = NULL;
263 $config['port'] = 6379;
264 $config['timeout'] = 0;
265
Andrey Andreev58c2b102012-10-26 14:42:29 +0300266All of the methods listed above can be accessed without passing a
267specific adapter to the driver loader as follows::
268
269 $this->load->driver('cache');
270 $this->cache->redis->save('foo', 'bar', 10);
271
kakyshac6fc0c82013-10-28 23:01:08 +0300272For more information on Redis, please see
273`http://redis.io <http://redis.io>`_.
Derek Jones8ede1a22011-10-05 13:34:52 -0500274
275Dummy Cache
276===========
277
278This is a caching backend that will always 'miss.' It stores no data,
279but lets you keep your caching code in place in environments that don't
Andrey Andreev58c2b102012-10-26 14:42:29 +0300280support your chosen cache.