-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathApc.php
More file actions
160 lines (142 loc) · 3.38 KB
/
Apc.php
File metadata and controls
160 lines (142 loc) · 3.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
<?php
/**
* Apc Cache Adapter
*
* @package Molajo
* @license http://www.opensource.org/licenses/mit-license.html MIT License
* @copyright 2014-2015 Amy Stephen. All rights reserved.
*/
namespace Molajo\Cache\Adapter;
use Exception;
use CommonApi\Exception\RuntimeException;
use Molajo\Cache\CacheItem;
use CommonApi\Cache\CacheInterface;
/**
* Apc Cache Adapter
*
* @author Amy Stephen
* @license http://www.opensource.org/licenses/mit-license.html MIT License
* @copyright 2014-2015 Amy Stephen. All rights reserved.
* @since 1.0.0
*/
class Apc extends AbstractAdapter implements CacheInterface
{
/**
* Constructor
*
* @param array $options
*
* @since 1.0
*/
public function __construct(array $options = array())
{
$this->cache_handler = 'Apc';
$this->connect($options);
}
/**
* Connect to Cache
*
* @param array $options
*
* @return $this
* @since 1.0
* @throws \CommonApi\Exception\RuntimeException
*/
public function connect($options = array())
{
parent::connect($options);
if (extension_loaded('apc')
&& ini_get('apc.enabled')
) {
} else {
throw new RuntimeException('Cache APC: APC is not enabled');
}
return $this;
}
/**
* Return cached value
*
* @param string $key
*
* @return bool|CacheItem
* @since 1.0
* @throws \CommonApi\Exception\RuntimeException
*/
public function get($key)
{
if ($this->cache_enabled == 0) {
return false;
}
try {
$exists = apc_exists($key);
$value = apc_fetch($key);
return new CacheItem($key, $value, $exists);
} catch (Exception $e) {
throw new RuntimeException
(
'Cache: Get Failed for Apc ' . $e->getMessage()
);
}
}
/**
* Create a cache entry
*
* @param null $key
* @param null $value
* @param integer $ttl (number of seconds)
*
* @return $this
* @since 1.0
* @throws \CommonApi\Exception\RuntimeException
*/
public function set($key, $value = null, $ttl = 0)
{
if ($this->cache_enabled == 0) {
return false;
}
if ($key === null) {
$key = serialize($value);
}
if ((int)$ttl == 0) {
$ttl = (int)$this->cache_time;
}
$results = apc_add($key, $value, (int)$ttl);
if ($results === false) {
throw new RuntimeException
(
'Cache APC Adapter: Set failed.'
);
}
return $this;
}
/**
* Remove cache for specified $key value
*
* @param string $key
*
* @return object
* @since 1.0
* @throws \CommonApi\Exception\RuntimeException
*/
public function remove($key = null)
{
$results = apc_delete($key);
if ($results === false) {
throw new RuntimeException
(
'Cache APC Adapter: Remove cache failed.'
);
}
return $this;
}
/**
* Clear all cache
*
* @return $this
* @since 1.0
*/
public function clear()
{
return apc_clear_cache('user');
}
}