| Cache-FastMemoryCache documentation | Contained in the Cache-FastMemoryCache distribution. |
Cache::FastMemoryCache - In-memory cache of arbitrary data.
use Cache::FastMemoryCache;
my $cache = new Cache::FastMemoryCache({ 'namespace' => 'MyNamespace' });
$key = 'xxx';
$href->{'name'} = 'old name';
$cache->set( $key, $href ); # insert into cache.
$href->{'name'} = 'new name'; # modify it after insert.
# Later...
$href = $cache->get($key);
print $href->{'name'}; # prints "new name"
Cache::FastMemoryCache is an in-memory cache, implemented as an extension to the excellent Cache::Cache suite. All cached items are stored per-process. The cache does not persist after the process dies. It is the fastest of all the Cache::* types because it does not perform deep copying of data.
See Cache::Cache for the API.
The other Cache::* types make deep copies of data before inserting it into the cache -- FastMemoryCache does not make copies.
The example in the SYNOPSIS section of this manual prints "new name" with FastMemoryCache, but prints "old name" with other cache types!
John Millaway <millaway@acm.org>
(Based heavily on DeWitt Clinton's Cache::MemoryCache module.)
Cache::Cache, Cache::MemoryCache.
| Cache-FastMemoryCache documentation | Contained in the Cache-FastMemoryCache distribution. |
# --------------------------------------------------------- # This code is largely based on DeWitt Clinton's # Cache::MemoryCache. It relies upon the fact that we have # ferreted out the calls to Clone_Data(). # --------------------------------------------------------- package Cache::FastMemoryCache; use 5.006; use strict; use warnings; our $VERSION = 0.01; use base qw ( Cache::BaseCache ); use Cache::CacheUtils qw( Assert_Defined Static_Params ); use Cache::FastMemoryBackend; sub Clear { foreach my $namespace ( _Namespaces( ) ) { _Get_Backend( )->delete_namespace( $namespace ); } } sub Purge { foreach my $namespace ( _Namespaces( ) ) { _Get_Cache( $namespace )->purge( ); } } sub Size { my $size = 0; foreach my $namespace ( _Namespaces( ) ) { $size += _Get_Cache( $namespace )->size( ); } return $size; } sub _Get_Backend { return new Cache::MemoryBackend( ); } sub _Namespaces { return _Get_Backend( )->get_namespaces( ); } sub _Get_Cache { my ( $p_namespace ) = Static_Params( @_ ); Assert_Defined( $p_namespace ); return new Cache::MemoryCache( { 'namespace' => $p_namespace } ); } sub new { my ( $self ) = _new( @_ ); $self->_complete_initialization( ); return $self; } sub _new { my ( $proto, $p_options_hash_ref ) = @_; my $class = ref( $proto ) || $proto; my $self = $class->SUPER::_new( $p_options_hash_ref ); $self->_set_backend( new Cache::FastMemoryBackend( ) ); return $self; } sub set_object { my ( $self, $p_key, $p_object ) = @_; my $object = $p_object; # no clone $object->set_size( undef ); $object->set_key( undef ); $self->_get_backend( )->store( $self->get_namespace( ), $p_key, $object ); } 1; __END__