schuk / cache-memcached-anyevent Goto Github PK
View Code? Open in Web Editor NEWThis project forked from lestrrat-p5/cache-memcached-anyevent
AnyEvent Compatible Memcached Client
This project forked from lestrrat-p5/cache-memcached-anyevent
AnyEvent Compatible Memcached Client
NAME Cache::Memcached::AnyEvent - AnyEvent Compatible Memcached Client SYNOPSIS use Cache::Memcached::AnyEvent; my $memd = Cache::Memcached::AnyEvent->new({ servers => [ '127.0.0.1:11211' ], compress_threshold => 10_000, namespace => 'myapp.', }); $memd->get( $key, sub { my ($value) = @_; warn "got $value for $key"; }); $memd->disconnect(); # use ketama algorithm instead of the traditional one my $memd = Cache::Memcached::AnyEvent->new({ ... selector_class => 'Ketama', # or, selector => $object }); # use binary protocol instead of text my $memd = Cache::Memcached::AnyEvent->new({ ... protocol_class => 'Binary', # or, protocol => $object, }); DESRIPTION WARNING: BETA QUALITY CODE! This module implements the memcached protocol as a AnyEvent consumer, and it implments both for text and binary protocols. RATIONALE There's another alternative AnyEvent memcached client, AnyEvent::Memcached which is perfectly fine, and I have nothing against you using that module. I just have some specific itches to scratch: Prerequisites This module, Cache::Memcached::AnyEvent, requires the bare minimum prerequisites to install. AnyEvent::Memcached requires AnyEvent::Connection and Object::Event ;) Those modules are fine, I just don't use them, so I don't want them. Binary Protocol I was in the mood to implement the binary protocol. I don't believe it's a requirement to do anything, so this is purely a whim. There's nothing that requires binary protocol in the wild, so it has no practactical advantages. I just wanted to implement it :) Cache::Memcached Interface In general, this module follows the interface of Cache::Memcached. So choose according to your needs. If you for some reason don't want AnyEvent::Connection and Object::Event, want a binary protocol, and like to stick with Cache::Memcached interface (relatively speaking), then use this module. Otherwise, read the docs for each module, and choose the one that fits your needs. METHODS All methods interacting with a memcached server which can take a callback function can also take a condvar instead. For example, $memd->get( "foo", sub { my $value = shift; } ); is equivalent to my $cv = AE::cv { my $value = $_[0]->recv; }; $memd->get( "foo", $cv ); # optionally, call $cv->recv here. new(%args) auto_reconnect => $max_attempts Set to 0 to disable auto-reconnecting compress_threshold => $number selector => $object The selector is an object responsible for selecting the appropriate Memcached server to store a particular key. This object MUST implement the following methods: $object->add_server( $host_port, $anyevent_handle ); my $handle = $object->get_handle( $key ); By default if this argument is not specified, a selector object will automatically be created using the value of the "selector_class" argument. selector_class => $class_name_or_fragment Specifies the selector class to be instantiated. The default value is "Traditional". If the class name is preceded by a single '+', then that class name with the '+' removed will be used as the class name. Otherwise, the prefix "Cache::Memcached::AnyEvent::Selector::" will be added to the value ("Traditional" would be transformed to "Cache::Memcached::AnyEvent::Selector::Traditional") namespace => $namespace procotol => $object The protocol is an object responsible for handling the actual talking to the memcached servers. This object MUST implement all of the memcached interface supported by Cache::Memcached::AnyEvent By default if this argument is not specified, a protocol object will automatically be created using the value of the "protocol_class" argument. protocol_class => $classname Specifies the protocol class to be instantiated. The default value is "Text". If the class name is preceded by a single '+', then that class name with the '+' removed will be used as the class name. Otherwise, the prefix "Cache::Memcached::AnyEvent::Protocol::" will be added to the value ("Text" would be transformed to "Cache::Memcached::AnyEvent::Protocol::Text") reconnect_delay => $seconds Amount of time to wait between reconnect attempts servers => \@servers List of servers to use. %args can also be a hashref. auto_reconnect([$bool]); Get/Set auto_reconnect flag. add($key, $value[, $exptime, $noreply], $cb->($rc)) append($key, $value, $cb->($rc)) connect() Explicitly connects to each server given. You DO NOT need to call this explicitly. decr($key, $delta[, $initial], $cb->($value)) delete($key, $cb->($rc)) disconnect() flush_all() get($key, $cb->($value)) get_handle( $host_port ) get_multi(\@keys, $cb->(\%values)); incr($key, $delta[, $initial], $cb->($value)) prepend($key, $value, $cb->($rc)); protocol($object) replace($key, $value[, $exptime, $noreply], $cb->($rc)) remove($key, $cb->($rc)) Alias to delete servers() set($key, $value[, $exptime, $noreply], $cb->($rc)) stats($cmd, $cb->(\%stats)) version( $cb->(\%result) ) TODO Binary stats is not yet implemented. AUTHOR Daisuke Maki "<[email protected]>" LICENSE This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See http://www.perl.com/perl/misc/Artistic.html
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.