1: | <?php |
2: | namespace Opencart\System\Library\Cache; |
3: | /** |
4: | * Class APCU |
5: | * |
6: | * @package Opencart\System\Library\Cache |
7: | */ |
8: | class Apcu { |
9: | /** |
10: | * @var int |
11: | */ |
12: | private int $expire; |
13: | /** |
14: | * @var bool |
15: | */ |
16: | private bool $active; |
17: | |
18: | /** |
19: | * Constructor |
20: | * |
21: | * @param int $expire |
22: | */ |
23: | public function __construct(int $expire = 3600) { |
24: | $this->expire = $expire; |
25: | $this->active = function_exists('apcu_cache_info') && ini_get('apc.enabled'); |
26: | } |
27: | |
28: | /** |
29: | * Get |
30: | * |
31: | * @param string $key |
32: | * |
33: | * @return mixed |
34: | */ |
35: | public function get(string $key) { |
36: | return $this->active ? apcu_fetch(CACHE_PREFIX . $key) : []; |
37: | } |
38: | |
39: | /** |
40: | * Set |
41: | * |
42: | * @param string $key |
43: | * @param mixed $value |
44: | * @param int $expire |
45: | * |
46: | * @return void |
47: | */ |
48: | public function set(string $key, $value, int $expire = 0): void { |
49: | if (!$expire) { |
50: | $expire = $this->expire; |
51: | } |
52: | |
53: | if ($this->active) { |
54: | apcu_store(CACHE_PREFIX . $key, $value, $expire); |
55: | } |
56: | } |
57: | |
58: | /** |
59: | * Delete |
60: | * |
61: | * @param string $key |
62: | * |
63: | * @return void |
64: | */ |
65: | public function delete(string $key): void { |
66: | if ($this->active) { |
67: | $cache_info = apcu_cache_info(); |
68: | |
69: | $cache_list = $cache_info['cache_list']; |
70: | |
71: | foreach ($cache_list as $entry) { |
72: | if (strpos($entry['info'], CACHE_PREFIX . $key) === 0) { |
73: | apcu_delete($entry['info']); |
74: | } |
75: | } |
76: | } |
77: | } |
78: | |
79: | /** |
80: | * Delete all cache |
81: | * |
82: | * @return bool |
83: | */ |
84: | public function flush(): bool { |
85: | $status = false; |
86: | |
87: | if (function_exists('apcu_clear_cache')) { |
88: | $status = apcu_clear_cache(); |
89: | } |
90: | |
91: | return $status; |
92: | } |
93: | } |
94: |