source: spip-zone/_plugins_/memoization/memo/xcache.inc @ 32482

Last change on this file since 32482 was 32482, checked in by fil@…, 11 years ago

reglage des lock

File size: 1.6 KB
Line 
1<?php
2
3/*
4mixed cache_get(string key)
5bool  cache_set(string key, mixed value [, int ttl])
6bool  cache_isset(string key)
7bool  cache_unset(string key)
8int   cache_inc(string key[, int value[, int ttl] ])
9int   cache_dec(string key[, int value[, int ttl] ])
10bool  cache_lock(string key)
11bool  cache_unlock(string key)
12*/
13
14# http://xcache.lighttpd.net/wiki/XcacheApi
15
16@define('_CACHE_NAMESPACE', $_SERVER['HTTP_HOST'].':');
17@define('_LOCK_MAX', 30); # max lock time (seconds)
18
19function cache_get($key) {
20        return xcache_get(_CACHE_NAMESPACE.$key);
21}
22
23function cache_set($key, $value, $ttl=null) {
24        return is_null($ttl)
25                ? xcache_set(_CACHE_NAMESPACE.$key, $value)
26                : xcache_set(_CACHE_NAMESPACE.$key, $value, $ttl);
27}
28
29function cache_isset($key) {
30        return xcache_isset(_CACHE_NAMESPACE.$key);
31}
32
33function cache_unset($key) {
34        return xcache_unset(_CACHE_NAMESPACE.$key);
35}
36
37function cache_inc($key, $value=null, $ttl=null) {
38        $a = func_get_args();
39        $a[0] = _CACHE_NAMESPACE.$key;
40        return call_user_func_array('xcache_inc', $a);
41}
42
43function cache_dec($key, $value=null, $ttl=null) {
44        $a = func_get_args();
45        $a[0] = _CACHE_NAMESPACE.$key;
46        return call_user_func_array('xcache_dec', $a);
47}
48
49function cache_lock($key, /* private */ $unlock = false) {
50        static $locks = array();
51
52        /* unlock */
53        if ($unlock) {
54                unset($locks[$key]);
55                cache_unset('lock::'.$key);
56        }
57        /* lock */
58        else {
59                if (!isset($locks[$key])) {
60                        while (cache_isset('lock::'.$key)
61                        OR cache_inc('lock::'.$key, 1, _LOCK_MAX) !== 1)
62                                sleep (1);
63                        register_shutdown_function('cache_lock', $key, true);
64                }
65        }
66}
67
68function cache_unlock($key) {
69        cache_lock($key, true);
70}
71
72?>
Note: See TracBrowser for help on using the repository browser.