NAME

Dancer::Plugin::MemcachedFast - Cache things using Cache::Memcached::Fast

SYNOPSIS

This plugin allows Dancer to use Cache::Memcached::Fast to get and store content on a number of memcached servers.

Add the following to your configuration file to enable the plugin:

plugins:
    MemcachedFast:
        servers:
            - "127.0.0.1:11211"
            - "127.0.0.1:22122"
        default_timeout: 3600
        namespace: "myapp:"

The options that can be used are the same as the parameters to the new constructor of Cache::Memcached::Fast, apart from default_timeout.

The default_timeout parameter defaults to 3600 seconds. It allows you to specify a time, in seconds, after which you would like keys to expire from the cache.

It accepts the same options that Cache::Memcached::Fast accepts.

In your app:

package MyApp;
use Dancer;
use Dancer::Plugin::MemcachedFast;

# Simply fetch the index from memcached if found,
# or set the cache to the parsed index template
get '/' => sub {
    memcached_get_or_set('index', sub {
        template 'index';
    });
};

# The login page can be shown from the cache,
# whereas if a user is logged in the cache is
# user-specific
get '/admin' => sub {
    unless (session->{username}) {
        return memcached_get_or_set('admin_login', sub {
            template 'admin_login';
        });
    };
    memcached_get_or_set('admin-home-' . session->{username}, sub {
        template 'admin_home';
    });
};

# Use memcache to cache bits of information only,
# for a specific amount of seconds
get '/articles' => sub {
    my $articles = memcached_get_or_set('articles-list', sub {
        # use DBI to fetch last 10 articles
        my @last_10_articles = ...;
        return \@last_10_articles
    }, 300);
    template 'articles_list' => { articles => $articles };
};

# forcibly delete a number of keys from the cache
get '/admin/PANIC' => {
    return redirect '/admin'
        unless session->{username};
    memcached_delete(
        qw/articles_list admin_login/,
        'admin-home-' . session->{username},
    );
    redirect '/admin';
};

# set a cache to a specified value unconditionally
get '/admin/meaningoflife' => sub {
    return redirect '/admin'
        unless session->{username};
    memcached_set('meaning', 42);
    redirect '/admin';
};

# get a value from the cache, who cares if it isn't there?!
get '/admin/maybe' => sub {
    my $meaning = memcached_get('meaningoflife');
    template 'meaning' => { meaning => $meaning };
};

DESCRIPTION

This plugin allows Dancer to use Cache::Memcached::Fast to get and store content on a number of memcached servers.

TIMEOUTS

You can set the default timeout via the configuration, as explained in the SYNOPSIS section. The default is 3600 seconds.

If you want to cache a value for as long as there is memory available to Memcache, you can achieve that by passing 0 as the expiration parameter (not undef, as that just uses the default_timeout).

KEYWORDS

memcached_get_or_set

Will check whether the specified key is found in the cache and return it where available. Otherwise it will set it to either the value given, or will call the coderef given ans set it to the value returned by the coderef. It will be cached either for the default number of seconds, or the number of seconds given.

# returns the value on memcached for 'keyname' if found, or
# sets the 'keyname' to the value 42 and its expiration to 300 seconds
memcached_get_or_set('key name', sub { 42 }, 300);
memcached_get_or_set('key name', 42, 300);
memcached_get_or_set('key name', [42], 300);

memcached_get

Attempts to get a value from memcached, and returns it. Uses get_multi if given more than one value to get. Expands arrayrefs where needed.

my $maybe  = memcached_get('key');
my $values = memcached_get(qw/keya keyb keyc/);
$values = memcached_get([qw/keya keyb keyc/], 'keyd', ['keye','keyf']);

memcached_gets

Retries the value and its CAS for the key given. Uses gets_multi if given more than one value to get. Expands arrayrefs where needed.

memcached_set

Sets unconditionally a key to a given value. A coderef may be used also, and its return value will be used. Alternatively, provide an arrayref for it to use set_multi on it. Takes an optional third value indicating the number of seconds the key will be cached for, or the default number of seconds. You can use an expiration value of 0 to mean that the value should never expire from the cache.

memcached_set('meaningoflife', 42);
memcached_set('meaningoflife', sub { 21 * 2 });
# "meaningoflife" will be cached for the default number of seconds:
memcached_set(['meaningoflife',42],['test',1234,300]);
memcached_set(['test',sub{42},123],['abc','def']);

memcached_add

Similar to memcached_set, but only operates if the key is not already stored in memcached.

memcached_replace

Similar to memcached_set, but only operates if the key is already stored in memcached.

memcached_delete

Forcibly expunges one or more keys from the cache.

memcached_delete('meaningoflife');
memcached_delete('meaningoflife','test');
memcached_delete( [ 'abc', 'def' ], [ 'xyz' ] );
memcached_delete( [ 'abc', 'def' ], 'xyz' );

memcached_append

Appends the given string to the already stored scalar value. See Cache::Memcached::Fast's method append and append_multi. append is used if the two given parameters are scalars, append_multi will be used if they are arrayrefs.

memcached_set( 'meaningoflife', '4' );
memcached_append( 'meaningoflife', '2' );
my $fourtytwo = memcached_get('meaningoflife');
memcached_append(['meaningoflife',42],['answer','whoknows']);

memcached_prepend

Same as append_multi, but works at the beginning of the string.

memcached_incr

Increments the key given by 1 or the optional value given. Can operate on arrayrefs, using incr_multi.

memcached_decr

Same as memcached_incr but decrements.

memcached_flush_all

Invalidates all caches the client knows about. See Cache::Memcached::Fast's flush_all method.

memcached_nowait_push

Pushes all the pending request to the server(s), see Cache::Memcached::Fast's nowait_push method.

memcached_server_versions

Returns the versions of the servers the plugin is connected to.

memcached_disconnect_all

Just in case your program forks and needs to disconnect them

memcached_compress

Needs a boolean, to enable or disable the compression. In order to work, the configuration options compress_threshold and compress_methods need to be pgiven. See Cache::Memcached::Fast for the options.

memcached_compress(42); # true, starts compressing
memcached_compress(1);  # true, starts compressing
memcached_compress(''); # false, stops compressing
memcached_compress(0);  # false, stops compressing

memcached_namespace

Either returns the current namespace prefix, or sets it to the given value and returns the old value.

my $current_prefix = memcached_namespace;
my $old_prexix     = memcached_namespace('test:');
# $current_prefix eq $old_prefix
$current_prefix = memcached_namespace;
# $current_prefix eq 'test:'

CONTRIBUTORS

Nikolay Mishin <mi@ya.ru>

COPYRIGHT AND LICENSE

This software is copyright (c) 2011 by Marco FONTANI. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.