Cache::FastMemoryCache - In-memory cache of arbitrary data.


Cache-FastMemoryCache documentation Contained in the Cache-FastMemoryCache distribution.

Index


Code Index:

NAME

Top

Cache::FastMemoryCache - In-memory cache of arbitrary data.

SYNOPSIS

Top

  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"




DESCRIPTION

Top

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.

METHODS

Top

See Cache::Cache for the API.

CAVEATS

Top

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!

AUTHOR

Top

John Millaway <millaway@acm.org>

(Based heavily on DeWitt Clinton's Cache::MemoryCache module.)

SEE ALSO

Top

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__