Changeset 32462 in spip-zone


Ignore:
Timestamp:
Oct 29, 2009, 8:59:04 AM (10 years ago)
Author:
fil@…
Message:

nettoyage de l'API et appels moins cryptiques

Location:
_plugins_/memoization/memo
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/memoization/memo/eaccelerator.inc

    r32458 r32462  
    11<?php
    22
    3 # l'API de cache_set etc est exactement celle de xcache
    4 # a ceci pres qu'on se reserve un namespace specifique au site
    5 # afin de ne pas se melanger sur un serveur mutualise
    6 #
    7 # je laisse le soin a qui voudra de refaire ca en mode objet
     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*/
    813
    9 /*
    10 mixed cache_get(string name)
    11 bool  cache_set(string name, mixed value [, int ttl])
    12 bool  cache_isset(string name)
    13 bool  cache_unset(string name)
    14 bool  cache_unset_by_prefix(string prefix)
    15 int   cache_inc(string name [, int value [, int ttl]])
    16 int   cache_dec(string name [, int value [, int ttl]])
    17 */
     14# http://bart.eaccelerator.net/doc/phpdoc/eAccelerator/_shared_memory_php.html
    1815
    1916@define('_CACHE_NAMESPACE', $_SERVER['HTTP_HOST'].':');
    2017
    21 function cache_get() {
    22         $a = func_get_args();
    23         $a[0] = _CACHE_NAMESPACE.$a[0];
    24         return ($v = call_user_func_array('eaccelerator_get', $a))
     18function cache_get($key) {
     19        return ($v = eaccelerator_get(_CACHE_NAMESPACE.$key))
    2520                ? @unserialize($v)
    2621                : null;
    2722}
    2823
    29 function cache_set() {
    30         $a = func_get_args();
    31         $a[0] = _CACHE_NAMESPACE.$a[0];
    32         $a[1] = serialize($a[1]);
    33         return call_user_func_array('eaccelerator_put', $a);
     24function cache_set($key, $value, $ttl = null) {
     25        $value = serialize($value);
     26        return is_null($ttl)
     27                ? eaccelerator_put(_CACHE_NAMESPACE.$key, $value)
     28                : eaccelerator_put(_CACHE_NAMESPACE.$key, $value, $ttl);
    3429}
    3530
    36 function cache_isset() {
    37         $a = func_get_args();
    38         return cache_get($a[0]) !== null;
     31function cache_isset($key) {
     32        return cache_get($key) !== null;
    3933}
    4034
    41 function cache_unset() {
    42         $a = func_get_args();
    43         $a[0] = _CACHE_NAMESPACE.$a[0];
    44         return call_user_func_array('eaccelerator_rm', $a);
     35function cache_unset($key) {
     36        return eaccelerator_rm(_CACHE_NAMESPACE.$key);
    4537}
    4638
    47 function cache_unset_by_prefix() {
    48         $a = func_get_args();
    49         return false; # on sait pas faire
     39function cache_inc($key) {
     40        while (!eaccelerator_lock($key)){ sleep(1); }
     41        $value = 1 + intval(cache_get($key));
     42        cache_set($key, $value);
     43        eaccelerator_unlock($key);
     44        return $value;
    5045}
    5146
    52 function cache_inc() {
    53         $a = func_get_args();
    54         $a[1] = intval(cache_get($a[0]))+1;
    55         return call_user_func_array('cache_set', $a);
     47function cache_dec($key) {
     48        while (!eaccelerator_lock($key)){ sleep(1); }
     49        $value = -1 + intval(cache_get($key));
     50        cache_set($key, $value);
     51        eaccelerator_unlock($key);
     52        return $value;
    5653}
    5754
    58 function cache_dec() {
    59         $a = func_get_args();
    60         $a[1] = intval(cache_get($a[0]))-1;
    61         return call_user_func_array('cache_set', $a);
     55function cache_lock($key) {
     56        return eaccelerator_lock(_CACHE_NAMESPACE.$key);
     57}
     58
     59function cache_unlock($key) {
     60        return eaccelerator_unlock(_CACHE_NAMESPACE.$key);
    6261}
    6362
  • _plugins_/memoization/memo/filecache.inc

    r32458 r32462  
    11<?php
    22
    3 # l'API de cache_set etc est exactement celle de xcache
    4 # a ceci pres qu'on se reserve un namespace specifique au site
    5 # afin de ne pas se melanger sur un serveur mutualise
    6 #
    7 # je laisse le soin a qui voudra de refaire ca en mode objet
    8 
    93/*
    10 mixed cache_get(string name)
    11 bool  cache_set(string name, mixed value [, int ttl])
    12 bool  cache_isset(string name)
    13 bool  cache_unset(string name)
    14 bool  cache_unset_by_prefix(string prefix)
    15 int   cache_inc(string name [, int value [, int ttl]])
    16 int   cache_dec(string name [, int value [, int ttl]])
     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)
    1712*/
    1813
     
    2419        return _DIR_TMP_XCACHE.substr(md5($u),0,4); # soit 16^4 fichiers max
    2520}
    26 function cache_delete_dir($dir) {
    27         if ($d = @opendir($dir))
    28                 while (($f = readdir($d)) !== false)
    29                         if (is_file($f))
    30                                 unlink($f);
    31 }
    3221
    33 function cache_get() {
    34         $a = func_get_args();
    35         if ($c = @file_get_contents(cache_filename($a[0]))
     22function cache_get($key) {
     23        if ($c = @file_get_contents(cache_filename($key))
    3624        AND $r = unserialize($c)
    37         AND $r[1] == $a[0]
     25        AND $r[1] == $key
    3826        AND $r[2] <= time())
    3927                return $r[0];
    4028}
    4129
    42 function cache_set() {
    43         $a = func_get_args();
    44         $r = array($a[1]);
    45         $r[1] = $a[0];
    46         $r[2] = isset($a[2])
    47                 ? time() + intval($a[2])
     30function cache_set($key, $value, $ttl=null) {
     31        $r = array($value);
     32        $r[1] = $key;
     33        $r[2] = isset($value)
     34                ? time() + intval($value)
    4835                : time() + 365*24*3600;
    4936        return (
    50                 $f = cache_filename($a[0])
     37                $f = cache_filename($key)
    5138                AND $n = @tempnam(dirname($f), 'xc')
    5239                AND $h = @fopen($n, 'w')
     
    5744}
    5845
    59 function cache_isset() {
    60         $a = func_get_args();
    61         if ($c = file_get_contents(cache_filename($a[0]))
     46function cache_isset($key) {
     47        if ($c = file_get_contents(cache_filename($key))
    6248        AND $r = unserialize($c)
    63         AND $r[1] == $a[0]
     49        AND $r[1] == $key
    6450        AND $r[2] <= time())
    6551                return true;
     
    6854}
    6955
    70 function cache_unset() {
    71         $a = func_get_args();
     56function cache_unset($key) {
    7257        return (
    73                 $c = file_get_contents($f = cache_filename($a[0]))
     58                $c = file_get_contents($f = cache_filename($key))
    7459                AND $s = supprimer_fichier($f)
    7560                AND $r = unserialize($c)
    76                 AND $r[1] == $a[0]
     61                AND $r[1] == $key
    7762                AND $r[2] <= time()
    7863        );
    7964}
    8065
    81 function cache_unset_by_prefix() {
    82         # ici on efface tout aveuglement
    83         cache_delete_dir(_DIR_TMP_XCACHE);
    84         return true;
     66function cache_inc($key) {
     67        while (!cache_lock($key)){ sleep(1); }
     68        $value = 1+intval(cache_get($key));
     69        cache_set($key, $value);
     70        cache_unlock($key);
     71        return $value;
    8572}
    8673
    87 function cache_inc() {
    88         $a = func_get_args();
    89         $a[1] = intval(cache_get($a[0]))+1;
    90         return call_user_func_array('cache_set', $a);
     74function cache_dec($key) {
     75        while (!cache_lock($key)){ sleep(1); }
     76        $value = -1 + intval(cache_get($key));
     77        cache_set($key, $value);
     78        cache_unlock($key);
     79        return $value;
    9180}
    9281
    93 function cache_dec() {
    94         $a = func_get_args();
    95         $a[1] = intval(cache_get($a[0]))-1;
    96         return call_user_func_array('cache_set', $a);
     82function cache_lock($key, /* private */ $unlock=false) {
     83        static $locks = array();
     84        $f = cache_filename($key);
     85
     86        if ($unlock) {
     87                return isset($locks[$f])
     88                        AND is_resource($locks[$f])
     89                        AND @flock($locks[$f], LOCK_UN)
     90                        AND @fclose($locks[$f]);
     91        } else {
     92                return ($locks[$f] = @fopen($f, 'w'))
     93                        AND @flock($locks[$f], LOCK_EX);
     94        }
     95}
     96
     97function cache_unlock($key) {
     98        return cache_lock($key, true);
    9799}
    98100
  • _plugins_/memoization/memo/nocache.inc

    r32453 r32462  
    11<?php
    22
    3 # l'API de cache_set etc est exactement celle de xcache
    4 # a ceci pres qu'on se reserve un namespace specifique au site
    5 # afin de ne pas se melanger sur un serveur mutualise
    6 #
    7 # je laisse le soin a qui voudra de refaire ca en mode objet
    8 
    93/*
    10 mixed cache_get(string name)
    11 bool  cache_set(string name, mixed value [, int ttl])
    12 bool  cache_isset(string name)
    13 bool  cache_unset(string name)
    14 bool  cache_unset_by_prefix(string prefix)
    15 int   cache_inc(string name [, int value [, int ttl]])
    16 int   cache_dec(string name [, int value [, int ttl]])
     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)
    1712*/
    1813
    19 function cache_get() {
     14function cache_get($key) {
    2015}
    2116
    22 function cache_set() {
     17function cache_set($key, $value, $ttl=null) {
    2318        return false;
    2419}
    2520
    26 function cache_isset() {
     21function cache_isset($key) {
    2722        return false;
    2823}
    2924
    30 function cache_unset() {
     25function cache_unset($key) {
    3126        return false;
    3227}
    3328
    34 function cache_unset_by_prefix() {
     29function cache_inc($key) {
     30        return 1;
     31}
     32
     33function cache_dec($key) {
     34        return -1;
     35}
     36
     37function cache_lock($key) {
    3538        return false;
    3639}
    3740
    38 function cache_inc() {
    39         return 1;
    40 }
    41 
    42 function cache_dec() {
    43         return -1;
     41function cache_unlock($key) {
     42        return false;
    4443}
    4544
  • _plugins_/memoization/memo/xcache.inc

    r32453 r32462  
    11<?php
    22
    3 # l'API de cache_set etc est exactement celle de xcache
    4 # a ceci pres qu'on se reserve un namespace specifique au site
    5 # afin de ne pas se melanger sur un serveur mutualise
    6 #
    7 # je laisse le soin a qui voudra de refaire ca en mode objet
     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*/
    813
    9 /*
    10 mixed cache_get(string name)
    11 bool  cache_set(string name, mixed value [, int ttl])
    12 bool  cache_isset(string name)
    13 bool  cache_unset(string name)
    14 bool  cache_unset_by_prefix(string prefix)
    15 int   cache_inc(string name [, int value [, int ttl]])
    16 int   cache_dec(string name [, int value [, int ttl]])
    17 */
     14# http://xcache.lighttpd.net/wiki/XcacheApi
    1815
    1916@define('_CACHE_NAMESPACE', $_SERVER['HTTP_HOST'].':');
    2017
    21 function cache_get() {
    22         $a = func_get_args();
    23         $a[0] = _CACHE_NAMESPACE.$a[0];
    24         return call_user_func_array('xcache_get', $a);
     18function cache_get($key) {
     19        return xcache_get(_CACHE_NAMESPACE.$key);
    2520}
    2621
    27 function cache_set() {
    28         $a = func_get_args();
    29         $a[0] = _CACHE_NAMESPACE.$a[0];
    30         return call_user_func_array('xcache_set', $a);
     22function cache_set($key, $value, $ttl=null) {
     23        return is_null($ttl)
     24                ? xcache_set(_CACHE_NAMESPACE.$key, $value)
     25                : xcache_set(_CACHE_NAMESPACE.$key, $value, $ttl);
    3126}
    3227
    33 function cache_isset() {
    34         $a = func_get_args();
    35         $a[0] = _CACHE_NAMESPACE.$a[0];
    36         return call_user_func_array('xcache_isset', $a);
     28function cache_isset($key) {
     29        return xcache_isset(_CACHE_NAMESPACE.$key);
    3730}
    3831
    39 function cache_unset() {
    40         $a = func_get_args();
    41         $a[0] = _CACHE_NAMESPACE.$a[0];
    42         return call_user_func_array('xcache_unset', $a);
     32function cache_unset($key) {
     33        return xcache_unset(_CACHE_NAMESPACE.$key);
    4334}
    4435
    45 function cache_unset_by_prefix() {
    46         $a = func_get_args();
    47         $a[0] = _CACHE_NAMESPACE.$a[0];
    48         return call_user_func_array('xcache_unset_by_prefix', $a);
     36function cache_inc($key) {
     37        return xcache_inc(_CACHE_NAMESPACE.$key);
    4938}
    5039
    51 function cache_inc() {
    52         $a = func_get_args();
    53         $a[0] = _CACHE_NAMESPACE.$a[0];
    54         return call_user_func_array('xcache_inc', $a);
     40function cache_dec($key) {
     41        return xcache_dec(_CACHE_NAMESPACE.$key);
    5542}
    5643
    57 function cache_dec() {
    58         $a = func_get_args();
    59         $a[0] = _CACHE_NAMESPACE.$a[0];
    60         return call_user_func_array('xcache_dec', $a);
     44function cache_lock($key) {
     45        return cache_inc('lock::'.$key)===1;
     46}
     47
     48function cache_unlock($key) {
     49        return cache_unset('lock::'.$key);
    6150}
    6251
Note: See TracChangeset for help on using the changeset viewer.