Provided by: libanyevent-memcached-perl_0.08-2_all bug

NAME

       AnyEvent::Memcached - AnyEvent memcached client

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 response 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];
               }
           } );

DESCRIPTION

       Asynchronous "memcached/memcachedb" client for AnyEvent framework

NOTICE

       There is a notices in Cache::Memcached::AnyEvent related to this module. They all has been
       fixed

       Prerequisites
           We no longer need Object::Event and Devel::Leak::Cb. At all, the dependency list is
           like in Cache::Memcached + AnyEvent

       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

       Unimplemented Methods
           There is a note, that get_multi is not implementeted. In fact, it was implemented by
           method "get", but the documentation was wrong.

       In general, this module follows the spirit of AnyEvent rather than correspondence to
       Cache::Memcached interface.

METHODS

   new %args
       Currently supported options:

       servers =item namespace =item debug =item cv =item compress_threshold =item
       compress_enable =item timeout =item hasher
           If set, will use instance of this class for hashing instead of default.  For
           implementing your own hashing, see sources of AnyEvent::Memcached::Hash and
           AnyEvent::Memcached::Hash::With::Next

       noreply
           If true, additional connection will established for noreply commands.

       cas If true, will enable cas/gets commands (since they are not suppotred in memcachedb)

   set_servers
           Setup server list

   connect
           Establish connection to all servers and invoke event C<connected>, when ready

   set( $key, $value, [cv => $cv], [ expire => $expire ], cb => $cb->( $rc, $err ) )
       Unconditionally sets a key to a given value in the memcache.

       $rc is

       '1' Successfully stored

       '0' Item was not stored

       undef
           Error happens, see $err

   cas( $key, $cas, $value, [cv => $cv], [ expire => $expire ], cb => $cb->( $rc, $err ) )
           $memd->gets($key, cb => sub {
               my $value = shift;
               unless (@_) { # No errors
                   my ($cas,$val) = @$value;
                   # Change your value in $val
                   $memd->cas( $key, $cas, $value, cb => sub {
                       my $rc = shift;
                       if ($rc) {
                           # stored
                       } else {
                           # ...
                       }
                   });
               }
           })

       $rc is the same, as for "set"

       Store the $value on the server under the $key, but only if CAS value associated with this
       key is equal to $cas. See also "gets"

   add( $key, $value, [cv => $cv], [ expire => $expire ], cb => $cb->( $rc, $err ) )
       Like "set", but only stores in memcache if the key doesn't already exist.

   replace( $key, $value, [cv => $cv], [ expire => $expire ], cb => $cb->( $rc, $err ) )
       Like "set", but only stores in memcache if the key already exists. The opposite of add.

   append( $key, $value, [cv => $cv], [ expire => $expire ], cb => $cb->( $rc, $err ) )
       Append the $value to the current value on the server under the $key.

       append command first appeared in memcached 1.2.4.

   prepend( $key, $value, [cv => $cv], [ expire => $expire ], cb => $cb->( $rc, $err ) )
       Prepend the $value to the current value on the server under the $key.

       prepend command first appeared in memcached 1.2.4.

   get( $key, [cv => $cv], [ expire => $expire ], cb => $cb->( $rc, $err ) )
       Retrieve the value for a $key. $key should be a scalar

   get( $keys : ARRAYREF, [cv => $cv], [ expire => $expire ], cb => $cb->( $values_hash, $err ) )
       Retrieve the values for a $keys. Return a hash with keys/values

   gets( $key, [cv => $cv], [ expire => $expire ], cb => $cb->( $rc, $err ) )
       Retrieve the value and its CAS for a $key. $key should be a scalar.

       $rc is a reference to an array [$cas, $value], or nothing for non-existent key

   gets( $keys : ARRAYREF, [cv => $cv], [ expire => $expire ], cb => $cb->( $rc, $err ) )
       Retrieve the values and their CAS for a $keys.

       $rc is a hash reference with $rc->{$key} is a reference to an array [$cas, $value]

   delete( $key, [cv => $cv], [ noreply => 1 ], cb => $cb->( $rc, $err ) )
       Delete $key and its value from the cache.

       If "noreply" is true, cb doesn't required

   del
       Alias for "delete"

   remove
       Alias for "delete"

   incr( $key, $increment, [cv => $cv], [ noreply => 1 ], cb => $cb->( $rc, $err ) )
       Increment the value for the $key by $delta. Starting with memcached 1.3.3 $key should be
       set to a number or the command will fail.  Note that the server doesn't check for
       overflow.

       If "noreply" is true, cb doesn't required, and if passed, simply called with rc = 1

       Similar to DBI, zero is returned as "0E0", and evaluates to true in a boolean context.

   decr( $key, $decrement, [cv => $cv], [ noreply => 1 ], cb => $cb->( $rc, $err ) )
       Opposite to "incr"

   rget( $from, $till, [ max => 100 ], [ '+left' => 1 ], [ '+right' => 1 ], [cv => $cv], [ rv =>
       'array' ], cb => $cb->( $rc, $err ) )
       Memcachedb 1.2.1-beta implements rget method, that allows one to look through the whole
       storage

       $from
           the starting key

       $till
           finishing key

       +left
           If true, then starting key will be included in results. true by default

       +right
           If true, then finishing key will be included in results. true by default

       max Maximum number of results to fetch. 100 is the maximum and is the default

       rv  If passed rv => 'array', then the return value will be arrayref with values in order,
           returned by memcachedb.

   incadd ( $key, $increment, [cv => $cv], [ noreply => 1 ], cb => $cb->( $rc, $err ) )
       Increment key, and if it not exists, add it with initial value. If add fails, try again to
       incr or fail

   destroy
       Shutdown object as much, as possible, incl cleaning of incapsulated objects

BUGS

       Feature requests are welcome

       Bug reports are welcome

AUTHOR

       Mons Anderson, "<mons at cpan.org>"

COPYRIGHT & LICENSE

       Copyright 2009 Mons Anderson, all rights reserved.

       This program is free software; you can redistribute it and/or modify it under the same
       terms as Perl itself.