%PDF- %PDF-
Direktori : /usr/share/perl5/vendor_perl/Cache/ |
Current File : //usr/share/perl5/vendor_perl/Cache/SizeAwareMemoryCache.pm |
###################################################################### # $Id: SizeAwareMemoryCache.pm,v 1.18 2002/04/07 17:04:46 dclinton Exp $ # Copyright (C) 2001-2003 DeWitt Clinton All Rights Reserved # # Software distributed under the License is distributed on an "AS # IS" basis, WITHOUT WARRANTY OF ANY KIND, either expressed or # implied. See the License for the specific language governing # rights and limitations under the License. ###################################################################### package Cache::SizeAwareMemoryCache; use strict; use vars qw( @ISA ); use Cache::Cache; use Cache::CacheSizer; use Cache::MemoryCache; use Cache::SizeAwareCache qw( $NO_MAX_SIZE ); @ISA = qw ( Cache::MemoryCache Cache::SizeAwareCache ); my $DEFAULT_MAX_SIZE = $NO_MAX_SIZE; sub Clear { return Cache::MemoryCache::Clear( ); } sub Purge { return Cache::MemoryCache::Purge( ); } sub Size { return Cache::MemoryCache::Size( ); } sub new { my ( $self ) = _new( @_ ); $self->_complete_initialization( ); return $self; } sub get { my ( $self, $p_key ) = @_; $self->_get_cache_sizer( )->update_access_time( $p_key ); return $self->SUPER::get( $p_key ); } sub limit_size { my ( $self, $p_new_size ) = @_; $self->_get_cache_sizer( )->limit_size( $p_new_size ); } sub set { my ( $self, $p_key, $p_data, $p_expires_in ) = @_; $self->SUPER::set( $p_key, $p_data, $p_expires_in ); $self->_get_cache_sizer( )->limit_size( $self->get_max_size( ) ); } sub _new { my ( $proto, $p_options_hash_ref ) = @_; my $class = ref( $proto ) || $proto; my $self = $class->SUPER::_new( $p_options_hash_ref ); $self->_initialize_cache_sizer( ); return $self; } sub _initialize_cache_sizer { my ( $self ) = @_; my $max_size = $self->_read_option( 'max_size', $DEFAULT_MAX_SIZE ); $self->_set_cache_sizer( new Cache::CacheSizer( $self, $max_size ) ); } sub get_max_size { my ( $self ) = @_; return $self->_get_cache_sizer( )->get_max_size( ); } sub set_max_size { my ( $self, $p_max_size ) = @_; $self->_get_cache_sizer( )->set_max_size( $p_max_size ); } sub _get_cache_sizer { my ( $self ) = @_; return $self->{_Cache_Sizer}; } sub _set_cache_sizer { my ( $self, $p_cache_sizer ) = @_; $self->{_Cache_Sizer} = $p_cache_sizer; } 1; __END__ =pod =head1 NAME Cache::SizeAwareMemoryCache -- extends Cache::MemoryCache =head1 DESCRIPTION The SizeAwareMemoryCache class adds the ability to dynamically limit the size (in bytes) of a memory based cache. This class also implements the SizeAwareCache interface, providing the 'max_size' option and the 'limit_size( $size )' method. =head1 SYNOPSIS use Cache::SizeAwareMemoryCache; my $cache = new Cache::SizeAwareMemoryCache( { 'namespace' => 'MyNamespace', 'default_expires_in' => 600, 'max_size' => 10000 } ); =head1 METHODS See Cache::Cache and Cache::SizeAwareCache for the API documentation. =head1 OPTIONS See Cache::Cache and Cache::SizeAwareCache for the standard options. =head1 PROPERTIES See Cache::Cache and Cache::SizeAwareCache for the default properties. =head1 SEE ALSO Cache::Cache, Cache::SizeAwareCache, Cache::MemoryCache =head1 AUTHOR Original author: DeWitt Clinton <dewitt@unto.net> Last author: $Author: dclinton $ Copyright (C) 2001-2003 DeWitt Clinton =cut