source: spip-zone/_plugins_/memoization/trunk/memo/apcu.inc @ 111308

Last change on this file since 111308 was 111308, checked in by cedric@…, 9 months ago

2 petits bugs de portage apc->apcu

File size: 1.6 KB
Line 
1<?php
2if (!defined('_CACHE_NAMESPACE'))
3        define('_CACHE_NAMESPACE', $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].":");
4
5class MCacheBackend_apcu extends MCacheBackend {
6
7        function key_for_lock($str) {
8                return _CACHE_NAMESPACE.md5($str."locked");
9        }
10
11        function get($key) {
12                $a = apcu_fetch(_CACHE_NAMESPACE.$key);
13                // maybe_unserialize
14                if (is_array($a))
15                        return @unserialize($a[0]);
16                else
17                        return $a;
18        }
19       
20        function set($key, $value, $ttl=null) {
21                // maybe_serialize
22                if (is_object($value) OR is_array($value))
23                        $value = array(serialize($value));
24                return is_null($ttl)
25                        ? apcu_store(_CACHE_NAMESPACE.$key, $value)
26                        : apcu_store(_CACHE_NAMESPACE.$key, $value, $ttl);
27        }
28       
29        function exists($key) {
30                return apcu_exists(_CACHE_NAMESPACE.$key);
31        }
32       
33        function del($key) {
34                return apcu_delete(_CACHE_NAMESPACE.$key);
35        }
36       
37        function inc($key, $value=null, $ttl=null) {
38                while (true) {
39                        if ($this->lock($key)) {
40                                $value = isset($value) ? intval($value) : 1;
41                                $value += intval($this->get($key));
42                                $this->set($key, $value, $ttl);
43                                $this->unlock($key);
44                                return $value;
45                        }
46                }
47        }
48       
49        function dec($key, $value=null, $ttl=null) {
50                $value = isset($value) ? intval($value) : 1;
51                return $this->inc($key, -$value, $ttl);
52        }
53
54        function lock($key, /* private */ $unlock = false) {
55           return apcu_add($this->key_for_lock($key), true);
56        }
57       
58        function unlock($key) {
59                return apcu_delete($this->key_for_lock($key));
60        }
61
62        function size() {
63                if (!class_exists('APCUIterator'))
64                        return false;
65                $a = new APCUIterator();
66                return $a->getTotalSize ();
67        }
68
69        function purge() {
70                return apcu_clear_cache();
71        }
72
73}
Note: See TracBrowser for help on using the repository browser.