source: Dev/branches/cakephp/cake/libs/cache/apc.php @ 126

Last change on this file since 126 was 126, checked in by fpvanagthoven, 14 years ago

Cakephp branch.

File size: 3.5 KB
Line 
1<?php
2/**
3 * APC storage engine for cache.
4 *
5 *
6 * PHP versions 4 and 5
7 *
8 * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
9 * Copyright 2005-2011, Cake Software Foundation, Inc. (http://cakefoundation.org)
10 *
11 * Licensed under The MIT License
12 * Redistributions of files must retain the above copyright notice.
13 *
14 * @copyright     Copyright 2005-2011, Cake Software Foundation, Inc. (http://cakefoundation.org)
15 * @link          http://cakephp.org CakePHP(tm) Project
16 * @package       cake
17 * @subpackage    cake.cake.libs.cache
18 * @since         CakePHP(tm) v 1.2.0.4933
19 * @license       MIT License (http://www.opensource.org/licenses/mit-license.php)
20 */
21
22/**
23 * APC storage engine for cache
24 *
25 * @package       cake
26 * @subpackage    cake.cake.libs.cache
27 */
28class ApcEngine extends CacheEngine {
29
30/**
31 * Initialize the Cache Engine
32 *
33 * Called automatically by the cache frontend
34 * To reinitialize the settings call Cache::engine('EngineName', [optional] settings = array());
35 *
36 * @param array $setting array of setting for the engine
37 * @return boolean True if the engine has been successfully initialized, false if not
38 * @see CacheEngine::__defaults
39 * @access public
40 */
41        function init($settings = array()) {
42                parent::init(array_merge(array('engine' => 'Apc', 'prefix' => Inflector::slug(APP_DIR) . '_'), $settings));
43                return function_exists('apc_cache_info');
44        }
45
46/**
47 * Write data for key into cache
48 *
49 * @param string $key Identifier for the data
50 * @param mixed $value Data to be cached
51 * @param integer $duration How long to cache the data, in seconds
52 * @return boolean True if the data was succesfully cached, false on failure
53 * @access public
54 */
55        function write($key, &$value, $duration) {
56                if ($duration == 0) {
57                        $expires = 0;
58                } else {
59                        $expires = time() + $duration;
60                }
61                apc_store($key.'_expires', $expires, $duration);
62                return apc_store($key, $value, $duration);
63        }
64
65/**
66 * Read a key from the cache
67 *
68 * @param string $key Identifier for the data
69 * @return mixed The cached data, or false if the data doesn't exist, has expired, or if there was an error fetching it
70 * @access public
71 */
72        function read($key) {
73                $time = time();
74                $cachetime = intval(apc_fetch($key.'_expires'));
75                if ($cachetime !== 0 && ($cachetime < $time || ($time + $this->settings['duration']) < $cachetime)) {
76                        return false;
77                }
78                return apc_fetch($key);
79        }
80
81/**
82 * Increments the value of an integer cached key
83 *
84 * @param string $key Identifier for the data
85 * @param integer $offset How much to increment
86 * @param integer $duration How long to cache the data, in seconds
87 * @return New incremented value, false otherwise
88 * @access public
89 */
90        function increment($key, $offset = 1) {
91                return apc_inc($key, $offset);
92        }
93
94/**
95 * Decrements the value of an integer cached key
96 *
97 * @param string $key Identifier for the data
98 * @param integer $offset How much to substract
99 * @param integer $duration How long to cache the data, in seconds
100 * @return New decremented value, false otherwise
101 * @access public
102 */
103        function decrement($key, $offset = 1) {
104                return apc_dec($key, $offset);
105        }
106
107/**
108 * Delete a key from the cache
109 *
110 * @param string $key Identifier for the data
111 * @return boolean True if the value was succesfully deleted, false if it didn't exist or couldn't be removed
112 * @access public
113 */
114        function delete($key) {
115                return apc_delete($key);
116        }
117
118/**
119 * Delete all keys from the cache
120 *
121 * @return boolean True if the cache was succesfully cleared, false otherwise
122 * @access public
123 */
124        function clear() {
125                return apc_clear_cache('user');
126        }
127}
Note: See TracBrowser for help on using the repository browser.