Changeset 1109

Show
Ignore:
Timestamp:
12/04/07 16:28:10 (10 months ago)
Author:
mikey
Message:

more thoughts for enhancement #116

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/src/main/php/net/stubbles/websites/cache/stubDefaultWebsiteCache.php

    r1099 r1109  
    11<?php 
    22/** 
    3  * Cache for websites. 
     3 * Default cache implementation for websites. 
    44 *  
    55 * @author      Frank Kleine <mikey@stubbles.net> 
    66 * @package     stubbles 
    7  * @subpackage  websites 
     7 * @subpackage  websites_cache 
    88 */ 
    9 stubClassLoader::load('net.stubbles.lang.stubMode', 
    10                       'net.stubbles.util.cache.stubCache', 
    11                       'net.stubbles.util.log.log', 
    12                       'net.stubbles.websites.cache.stubWebsiteCache' 
    13 ); 
     9stubClassLoader::load('net.stubbles.websites.cache.stubAbstractWebsiteCache'); 
    1410/** 
    15  * Cache for websites. 
     11 * Default cache implementation for websites. 
    1612 *  
    1713 * @package     stubbles 
    18  * @subpackage  websites 
     14 * @subpackage  websites_cache 
    1915 */ 
    20 class stubDefaultWebsiteCache extends stubBaseObject implements stubWebsiteCache 
     16class stubDefaultWebsiteCache extends stubAbstractWebsiteCache 
    2117{ 
    2218    /** 
    23      * reason why cache is missing 
    24      * 
    25      * @var  string 
    26      */ 
    27     protected $missReason = ''; 
    28     /** 
    29      * list of keys for the cache 
     19     * list of variables for the cache 
    3020     * 
    3121     * @var  array<string,scalar> 
    3222     */ 
    33     protected $cacheKeys  = array(); 
     23    protected $cacheVars  = array(); 
    3424    /** 
    3525     * list of files used when generating the page 
     
    4333     * @var  bool 
    4434     */ 
    45     protected $checkFiles = true; 
    46     /** 
    47      * the real cache 
    48      * 
    49      * @var  stubCacheContainer 
    50      */ 
    51     protected $cache; 
     35    protected $checkFiles = false; 
    5236 
    5337    /** 
     
    7256 
    7357    /** 
    74      * adds a key to the list of cache key
     58     * adds a variable to the list of cache variable
    7559     * 
    76      * @param  string  $key 
     60     * @param  string  $name 
    7761     * @param  scalar  $value 
    7862     */ 
    79     public function addCacheKey($key, $value) 
     63    public function addCacheVar($name, $value) 
    8064    { 
    81         $this->cacheKeys[$key] = $value; 
     65        $this->cacheVars[$name] = $value; 
     66    } 
     67 
     68    /** 
     69     * adds a list of variables to the list of cache variables 
     70     * 
     71     * @param  array<string,scalar> 
     72     */ 
     73    public function addCacheVars(array $cacheVars) 
     74    { 
     75        foreach ($cacheVars as $name => $value) { 
     76            $this->cacheVars[$name] = $value; 
     77        } 
    8278    } 
    8379 
     
    9389 
    9490    /** 
    95      * retrieves data from cache and puts it into response 
     91     * adds a list of files to the list of used files 
    9692     * 
     93     * @param  array<string>  $file 
     94     */ 
     95    public function addUsedFiles(array $files) 
     96    { 
     97        foreach ($files as $file) { 
     98            $this->usedFiles[$file] = $file; 
     99        } 
     100    } 
     101 
     102    /** 
     103     * does the real retrieve 
     104     * 
     105     * @param   stubRequest   $request 
    97106     * @param   stubResponse  $response 
    98      * @param   string        $page      name of the page to be cached 
    99      * @return  bool          true if data was retrieved from cache, else false 
     107     * @param   string        $cacheKey 
     108     * @return  bool          true if successfully retrieved, else false 
    100109     */ 
    101     public function retrieve(stubResponse $response, $page
     110    protected function doRetrieve(stubRequest $request, stubResponse $response, $cacheKey
    102111    { 
    103         $cacheKey = $this->generateCacheKey($page); 
    104         if ($this->isCached($cacheKey) === false) { 
    105             $this->log($cacheKey, 'miss'); 
    106             return false; 
    107         } 
    108          
    109         if (stubMode::$CURRENT->name() !== 'PROD') { 
    110             $response->addHeader('X-Cached', $this->getClassName()); 
    111         } 
    112          
    113112        $response->write($this->cache->get($cacheKey)); 
    114         $this->log($cacheKey, 'hit'); 
    115113        return true; 
    116114    } 
    117115 
    118116    /** 
    119      * stores the data from the response in cch
     117     * does the real storag
    120118     * 
    121      * @param  stubResponse  $response 
    122      * @param  string        $page      name of the page to be cached 
     119     * @param   stubRequest   $request 
     120     * @param   stubResponse  $response 
     121     * @param   string        $cacheKey 
     122     * @return  bool          true if successfully stored, else false 
    123123     */ 
    124     public function store(stubResponse $response, $page
     124    protected function doStore(stubRequest $request, stubResponse $response, $cacheKey
    125125    { 
    126         if (stubMode::$CURRENT->isCacheEnabled() === false) { 
    127             return; 
    128         } 
    129          
    130         $cacheKey = $this->generateCacheKey($page); 
    131         $this->cache->put($cacheKey, $response->getData()); 
     126        return (bool) $this->cache->put($cacheKey, $response->getData()); 
    132127    } 
    133128 
    134129    /** 
    135      * checks whether data is cached or not 
     130     * returns true if used files check is enabled 
    136131     * 
    137132     * @return  bool 
    138133     */ 
    139     protected function isCached($cacheKey
     134    protected abstract function isUsedFilesCheckEnabled(
    140135    { 
    141         if (stubMode::$CURRENT->isCacheEnabled() === false) { 
    142             $this->missReason = 'disabled'; 
    143             return false; 
    144         } 
    145          
    146         if ($this->cache->has($cacheKey) === false) { 
    147             $this->missReason = 'no cache file'; 
    148             return false; 
    149         } 
    150          
    151         if (false === $this->checkFiles) { 
    152             return true; 
    153         } 
    154          
    155         $cacheTime = $this->cache->getStoreTime($cacheKey); 
    156         clearstatcache(); 
    157         foreach ($this->getUsedFiles as $fileName) { 
    158             if (is_readable($filename) === false) { 
    159                 continue; 
    160             } 
    161              
    162             if (filemtime($fileName) > $cacheTime) { 
    163                 $this->missReason = $fileName . ' is newer'; 
    164                 return false; 
    165             } 
    166         } 
    167          
    168         return true; 
     136        return $this->checkFiles; 
    169137    } 
    170138 
    171139    /** 
    172      * helper method to log cache acticity 
     140     * returns the list of used files 
    173141     * 
    174      * @param  string  $cacheKey  key for cache data 
    175      * @param  string  $type      'hit' or 'miss' 
     142     * @return  array<string> 
    176143     */ 
    177     protected function log($cacheKey, $type
     144    protected function getUsedFiles(
    178145    { 
    179         $logData  = stubLogDataFactory::create('cache', stubLogger::LEVEL_INFO); 
    180         $logData->addData($this->page); 
    181         $logData->addData($type); 
    182         $logData->addData(compression); 
    183         $logData->addData($this->missReason); 
    184         $logData->addData($cacheKey); 
    185         stubLogger::logToAll($logData); 
     146        return $this->usedFiles; 
    186147    } 
    187148 
    188149    /** 
    189      * generates the cache key from given list of cache key
     150     * returns the list of cache variable
    190151     * 
    191      * @param   string  $page  name of the page to be cached 
    192      * @return  string 
     152     * @return  array<string,scalar> 
    193153     */ 
    194     protected function generateCacheKey($page
     154    protected function getCacheVars(
    195155    { 
    196         $baseKey = $page . '?'; 
    197         foreach ($this->cacheKeys as $key => $value) { 
    198             $baseKey .= '&' . $key . '=' . $value; 
    199         } 
    200          
    201         return md5($baseKey); 
     156        return $this->cacheVars; 
    202157    } 
    203158} 
  • trunk/src/main/php/net/stubbles/websites/cache/stubWebsiteCache.php

    r1099 r1109  
    55 * @author      Frank Kleine <mikey@stubbles.net> 
    66 * @package     stubbles 
    7  * @subpackage  websites 
     7 * @subpackage  websites_cache 
    88 */ 
    9 stubClassLoader::load('net.stubbles.ipo.response.stubResponse'); 
     9stubClassLoader::load('net.stubbles.ipo.request.stubRequest', 
     10                      'net.stubbles.ipo.response.stubResponse' 
     11); 
    1012/** 
    1113 * Cache for websites. 
    1214 *  
    1315 * @package     stubbles 
    14  * @subpackage  websites 
     16 * @subpackage  websites_cache 
    1517 */ 
    1618interface stubWebsiteCache extends stubObject 
    1719{ 
     20    /** 
     21     * cache hit 
     22     */ 
     23    const HIT  = 'hit'; 
     24    /** 
     25     * cache miss 
     26     */ 
     27    const MISS = 'miss'; 
    1828 
    1929    /** 
     
    2535 
    2636    /** 
    27      * adds a key to the list of cache key
     37     * adds a variable to the list of cache variable
    2838     * 
    29      * @param  string  $key 
     39     * @param  string  $name 
    3040     * @param  scalar  $value 
    3141     */ 
    32     public function addCacheKey($key, $value); 
     42    public function addCacheVar($name, $value); 
    3343 
    3444    /** 
    35      * list of used files 
     45     * adds a list of variables to the list of cache variables 
     46     * 
     47     * @param  array<string,scalar> 
     48     */ 
     49    public function addCacheVars(array $cacheVars); 
     50 
     51    /** 
     52     * adds a file to the list of used files 
    3653     * 
    3754     * @param  string  $file 
     
    4057 
    4158    /** 
     59     * adds a list of files to the list of used files 
     60     * 
     61     * @param  array<string>  $file 
     62     */ 
     63    public function addUsedFiles(array $files); 
     64 
     65    /** 
     66     * returns the cache container used by the implementation 
     67     * 
     68     * @return  stubCacheContainer 
     69     */ 
     70    public function getCacheContainer(); 
     71 
     72    /** 
    4273     * retrieves data from cache and puts it into response 
    4374     * 
     75     * @param   stubRequest   $request 
    4476     * @param   stubResponse  $response 
    4577     * @param   string        $page      name of the page to be cached 
    4678     * @return  bool          true if data was retrieved from cache, else false 
    4779     */ 
    48     public function retrieve(stubResponse $response, $page); 
     80    public function retrieve(stubRequest $request, stubResponse $response, $page); 
    4981 
    5082    /** 
    5183     * stores the data from the response in cche 
    5284     * 
    53      * @param  stubResponse  $response 
    54      * @param  string        $page      name of the page to be cached 
     85     * @param   stubRequest   $request 
     86     * @param   stubResponse  $response 
     87     * @param   string        $page      name of the page to be cached 
     88     * @return  bool          true if successfully stored, else false 
    5589     */ 
    56     public function store(stubResponse $response, $page); 
     90    public function store(stubRequest $request, stubResponse $response, $page); 
    5791} 
    5892?>