Show
Ignore:
Timestamp:
02/14/08 07:36:10 (5 years ago)
Author:
daisuke
Message:

Subclass Memcached::libmemcached

Location:
lang/perl/Cache-Memcached-libmemcached/trunk
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • lang/perl/Cache-Memcached-libmemcached/trunk/Makefile.PL

    r5720 r6655  
    55all_from('lib/Cache/Memcached/libmemcached.pm'); 
    66 
    7 requires('Memcached::libmemcached', '0.1402'); 
     7requires('Memcached::libmemcached', '0.1405'); 
    88requires('Storable'); 
    99requires('Carp'); 
  • lang/perl/Cache-Memcached-libmemcached/trunk/lib/Cache/Memcached/libmemcached.pm

    r5734 r6655  
    77use strict; 
    88use warnings; 
     9use base qw(Memcached::libmemcached); 
    910use Carp qw(croak); 
    10 use Memcached::libmemcached (); 
    1111use Storable (); 
    1212 
    1313our $VERSION = '0.01000'; 
    14  
    15 use constant MEMD_BACKEND            => 0; 
    16 use constant MEMD_COMPRESS_ENABLE    => 1; 
    17 use constant MEMD_COMPRESS_THRESHOLD => 2; 
    18 use constant MEMD_COMPRESS_SAVINGS   => 3; 
    1914 
    2015use constant HAVE_ZLIB    => eval { require Compress::Zlib } && !$@; 
     
    2621    # accessors 
    2722    foreach my $field qw(compress_enable compress_threshold compress_savings) { 
    28         eval sprintf(<<"        EOSUB", $field, uc $field, $field, uc $field); 
    29             sub set_%s { 
    30                 my \$self = shift; 
    31                 \$self->[ MEMD_%s ] = shift; 
    32             } 
    33  
    34             sub get_%s { 
    35                 shift->[ MEMD_%s ]; 
    36             } 
     23        eval sprintf(<<"        EOSUB", $field, $field, $field, $field); 
     24            sub set_%s { \$_[0]->{%s} = \$_[1] } 
     25            sub get_%s { \$_[0]->{%s} } 
    3726        EOSUB 
    3827        die if $@; 
     
    4029 
    4130    # proxy these methods 
    42     foreach my $method qw(delete get set add replace prepend append cas) { 
     31    foreach my $method qw(delete set add replace prepend append cas) { 
    4332        eval <<"        EOSUB"; 
    44             sub $method { 
    45                 Memcached::libmemcached::memcached_$method(shift->[MEMD_BACKEND], \@_) 
    46             } 
     33            sub $method { shift->memcached_$method(\@_) } 
    4734        EOSUB 
    4835        die if $@; 
     
    6350    $args->{servers} || die "No servers specified"; 
    6451 
    65     my $memd  = Memcached::libmemcached::memcached_create(); 
    66     my $self = bless [], $class; 
    67  
    68     $self->[MEMD_BACKEND]            = $memd; 
    69     $self->[MEMD_COMPRESS_THRESHOLD] = $args->{compress_threshold}; 
    70     $self->[MEMD_COMPRESS_SAVINGS]   = $args->{compress_savings} || 0.20; 
    71     $self->[MEMD_COMPRESS_ENABLE]    = 
     52    my $self = $class->SUPER::new(); 
     53 
     54    $self->{compress_threshold} = $args->{compress_threshold}; 
     55    $self->{compress_savingsS}   = $args->{compress_savings} || 0.20; 
     56    $self->{compress_enable}    = 
    7257        exists $args->{compress_enable} ? $args->{compress_enable} : 1; 
    7358 
     
    7661 
    7762    # Set compression/serialization callbacks 
    78     Memcached::libmemcached::memcached_set_callback_coderefs($memd,  
     63    $self->set_callback_coderefs( 
    7964        # Closures so we have reference to $self 
    8065        $self->_mk_callbacks() 
     
    10388    # check for existance of :  
    10489    if (my ($hostname, $port) = split(/:/, $server)) { 
    105         Memcached::libmemcached::memcached_server_add( $self->[MEMD_BACKEND], $hostname, $port ); 
     90        $self->memcached_server_add($hostname, $port ); 
    10691    } else { 
    107         Memcached::libmemcached::memcached_server_add_unix( $self->[MEMD_BACKEND], $server ); 
     92        $self->memcached_server_add_uni( $server ); 
    10893    } 
    109 } 
    110  
    111 sub get_multi 
    112 { 
    113     my $self = shift; 
    114     my $hv = {}; 
    115     Memcached::libmemcached::memcached_mget_into_hashref($self->[MEMD_BACKEND], [ @_ ], $hv); 
    116     return $hv; 
    11794} 
    11895 
     
    144121 
    145122        # Check if we need compression 
    146         if (HAVE_ZLIB && $self->[MEMD_COMPRESS_ENABLE] && $self->[MEMD_COMPRESS_THRESHOLD]) { 
     123        if (HAVE_ZLIB && $self->{compress_enable} && $self->{compress_threshold}) { 
    147124            # Find the byte length 
    148125            my $length = bytes::length($_); 
    149             if ($length > $self->[MEMD_COMPRESS_THRESHOLD]) { 
     126            if ($length > $self->{compress_threshold}) { 
    150127                my $tmp = Compress::Zlib::memGzip($_); 
    151                 if (1 - bytes::length($tmp) / $length < $self->[MEMD_COMPRESS_SAVINGS]) { 
     128                if (1 - bytes::length($tmp) / $length < $self->{compress_savingsS}) { 
    152129                    $_ = $tmp; 
    153130                    $_[1] |= F_COMPRESS; 
     
    166143    $_[1] ||= 1 if @_ < 2; 
    167144    my $val = 0; 
    168     Memcached::libmemcached::memcached_increment($self->[MEMD_BACKEND], @_[0,1], $val); 
     145    $self->memcached_increment(@_[0,1], $val); 
    169146    return $val; 
    170147} 
     
    176153    $_[1] ||= 1 if @_ < 2; 
    177154    my $val = 0; 
    178     Memcached::libmemcached::memcached_decrement($self->[MEMD_BACKEND], @_[0,1], $val); 
     155    $self->memcached_decrement(@_[0,1], $val); 
    179156    return $val; 
    180157} 
     
    182159sub flush_all 
    183160{ 
    184     my $self = shift; 
    185     Memcached::libmemcached::memcached_flush($self->[MEMD_BACKEND], 0); 
     161    $_[0]->memcached_flush(0); 
    186162} 
    187163 
     
    190166sub disconnect_all 
    191167{ 
    192     my $self = shift; 
    193     Memcached::libmemcached::memcached_quit($self->[MEMD_BACKEND]); 
     168    $_[0]->memcached_quit(); 
    194169} 
    195170 
     
    198173sub is_no_block 
    199174{ 
    200     shift->behavior_get( Memcached::libmemcached::MEMCACHED_BEHAVIOR_NO_BLOCK() ); 
     175    shift->memcached_behavior_get( Memcached::libmemcached::MEMCACHED_BEHAVIOR_NO_BLOCK() ); 
    201176} 
    202177 
    203178sub set_no_block 
    204179{ 
    205     shift->behavior_set( 
     180    shift->memcached_behavior_set( 
    206181        Memcached::libmemcached::MEMCACHED_BEHAVIOR_NO_BLOCK(), 
    207182        $_[0] 
     
    211186sub get_distribution_method 
    212187{ 
    213     shift->behavior_get( Memcached::libmemcached::MEMCACHED_BEHAVIOR_DISTRIBUTION() ); 
     188    shift->memcached_behavior_get( Memcached::libmemcached::MEMCACHED_BEHAVIOR_DISTRIBUTION() ); 
    214189} 
    215190 
    216191sub set_distribution_method 
    217192{ 
    218     shift->behavior_set( 
     193    shift->memcached_behavior_set( 
    219194        Memcached::libmemcached::MEMCACHED_BEHAVIOR_DISTRIBUTION(), 
    220195        $_[0] 
     
    224199sub get_hashing_algorithm 
    225200{ 
    226     shift->behavior_get( Memcached::libmemcached::MEMCACHED_BEHAVIOR_HASH() ); 
     201    shift->memcached_behavior_get( Memcached::libmemcached::MEMCACHED_BEHAVIOR_HASH() ); 
    227202} 
    228203 
    229204sub set_hashing_algorithm 
    230205{ 
    231     shift->behavior_set( 
     206    shift->memcached_behavior_set( 
    232207        Memcached::libmemcached::MEMCACHED_BEHAVIOR_HASH(), 
    233208        $_[0] 
    234209    ); 
    235 } 
    236  
    237 sub behavior_get 
    238 { 
    239     my $self = shift; 
    240     Memcached::libmemcached::memcached_behavior_get($self->[MEMD_BACKEND], @_); 
    241 } 
    242  
    243 sub behavior_set 
    244 { 
    245     my $self = shift; 
    246     Memcached::libmemcached::memcached_behavior_set($self->[MEMD_BACKEND], @_); 
    247210} 
    248211 
     
    293256Cache::Memcached::libmemcached attempts to be API compatible with 
    294257Cache::Memcached, so it can be used as a drop-in replacement. 
     258 
     259Note that as of version 0.02000, Cache::Memcached::libmemcached I<inherits> 
     260from Memcached::libmemcached. While you are free to use the  
     261Memcached::libmemcached specific methods directly on the object, you should 
     262use them with care, as it will mean that your code is no longer compatible 
     263with the Cache::Memcached API therefore losing some of th portability in 
     264case you want to replace it with some other package. 
    295265 
    296266=head1 FOR Cache::Memcached::LibMemcached USERS 
  • lang/perl/Cache-Memcached-libmemcached/trunk/t/01_load.t

    r5734 r6655  
    66    qw(new get get_multi set stats disconnect_all set_servers flush_all), 
    77    qw(is_no_block set_no_block get_distribution_method set_distribution_method get_hashing_algorithm set_hashing_algorithm), 
    8     qw(behavior_set behavior_get) 
    98) );