AnyEvent-Memcached
view release on metacpan or search on metacpan
lib/AnyEvent/Memcached.pm view on Meta::CPAN
=head1 SYNOPSIS
use AnyEvent::Memcached;
my $memd = AnyEvent::Memcached->new(
servers => [ "10.0.0.15:11211", "10.0.0.15:11212" ], # same as in Cache::Memcached
debug => 1,
compress_threshold => 10000,
namespace => 'my-namespace:',
# May use another hashing algo:
hasher => 'AnyEvent::Memcached::Hash::WithNext',
cv => $cv, # AnyEvent->condvar: group callback
);
$memd->set_servers([ "10.0.0.15:11211", "10.0.0.15:11212" ]);
# Basic methods are like in Cache::Memcached, but with additional cb => sub { ... };
# first argument to cb is return value, second is the error(s)
$memd->set( key => $value, cb => sub {
shift or warn "Set failed: @_"
} );
# Single get
$memd->get( 'key', cb => sub {
my ($value,$err) = shift;
$err and return warn "Get failed: @_";
warn "Value for key is $value";
} );
# Multi-get
$memd->get( [ 'key1', 'key2' ], cb => sub {
my ($values,$err) = shift;
$err and return warn "Get failed: @_";
warn "Value for key1 is $values->{key1} and value for key2 is $values->{key2}"
} );
# Additionally there is rget (see memcachedb-1.2.1-beta)
$memd->rget( 'fromkey', 'tokey', cb => sub {
my ($values,$err) = shift;
$err and warn "Get failed: @_";
while (my ($key,$value) = each %$values) {
# ...
}
} );
# Rget with sorted responce values
$memd->rget( 'fromkey', 'tokey', rv => 'array' cb => sub {
my ($values,$err) = shift;
$err and warn "Get failed: @_";
for (0 .. $#values/2) {
my ($key,$value) = @$values[$_*2,$_*2+1];
}
} );
=head1 DESCRIPTION
Asyncronous C<memcached/memcachedb> client for L<AnyEvent> framework
=head1 NOTICE
There is a notices in L<Cache::Memcached::AnyEvent> related to this module. They all has been fixed
=over 4
=item Prerequisites
We no longer need L<Object::Event> and L<Devel::Leak::Cb>. At all, the dependency list is like in L<Cache::Memcached> + L<AnyEvent>
=item Binary protocol
It seems to me, that usage of binary protocol from pure perl gives very little advantage. So for now I don't implement it
=item Unimplemented Methods
There is a note, that get_multi is not implementeted. In fact, it was implemented by method L</get>, but the documentation was wrong.
=back
In general, this module follows the spirit of L<AnyEvent> rather than correspondence to L<Cache::Memcached> interface.
=cut
use common::sense 2;m{
use strict;
use warnings;
}x;
use Carp;
use AnyEvent 5;
#use Devel::Leak::Cb;
use AnyEvent::Socket;
use AnyEvent::Handle;
use AnyEvent::Connection;
use AnyEvent::Connection::Util;
use AnyEvent::Memcached::Conn;
use Storable ();
use AnyEvent::Memcached::Peer;
use AnyEvent::Memcached::Hash;
use AnyEvent::Memcached::Buckets;
# flag definitions
use constant F_STORABLE => 1;
use constant F_COMPRESS => 2;
# size savings required before saving compressed value
use constant COMPRESS_SAVINGS => 0.20; # percent
our $HAVE_ZLIB;
BEGIN {
$HAVE_ZLIB = eval "use Compress::Zlib (); 1;";
}
=head1 METHODS
=head2 new %args
( run in 0.601 second using v1.01-cache-2.11-cpan-df04353d9ac )