Cache::Static - Caching without freshness concerns
In handler.pl: use Cache::Static;
In any component you where you have a well defined set of dependencies which change the output:
<%init> my $_cs_deps = [ #file dependencies - only regenerate if a file has changed 'file|/path/to/some_configuration_file', #DBI dependencies - still under development - WONT WORK #DBI dependencies: note the third argument is a DSN '_DBI|table|mysql:scache_test_db|test_table', '_DBI|db|mysql:scache_test_db', #not yet implemented: #column level depends, e.g. "DBI|column|$dsn|$tablename|$columname" #row depends, e.g. "DBI|row|$dsn|$tablename|$uid_column_name|$uid_value" #XML::Comma dependencies - only regenerate if a Doc or Store has changed "_XML::Comma|Doc|$doc_key", "_XML::Comma|Store|$def|$store", #time dependencies (WARNING: these are discouraged, see doc/NOTE-time-deps) 'time|15s', #every 15 seconds 'time|M:15s', #every 15 seconds after the minute 'time|H:2m', #every 2 minutes past the hour 'time|W:2d3h5m0s', #every Tuesday at 3:05 AM #modifiers (indicate behavior when the file cannot be found) 'file-0|/tmp/foo', #if ! -e /tmp/foo, regenerate 'file-1|/tmp/foo', #if ! -e /tmp/foo, serve 'file|/tmp/foo', #use config value "dep_file_not_found_returns" #note modifiers also work on extensions, e.g. '_DBI-1|db|mysql:scache_test_db', '_XML::Comma-0|Store|mm_item|post', #etc... but modifiers CANNOT be used with times (since they have no #file backing on disk) ]; #whatever you have in $_cs_deps above... return if Cache::Static::HTML_Mason_Util::cache_it($r, $m, 1, $_cs_deps); #... #rest of init block #... </%init>
TODO: an overview (and decent API) for usage outside of HTML::Mason land.
The guts of Cache::Static, in all its glory.
Brian Szymanski <scache@allafrica.com>
http://chronicle.allafrica.com/scache/
To install Cache::Static, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Cache::Static
CPAN shell
perl -MCPAN -e shell install Cache::Static
For more information on module installation, please visit the detailed CPAN module installation guide.