# NAME

Cache::Memcached::Fast::Safe - Cache::Memcached::Fast with sanitizing keys and fork-safe

# SYNOPSIS

    use Cache::Memcached::Fast::Safe;
    
    my $memd = Cache::Memcached::Fast::Safe->new({
      servers => [..]
    });
    
    #This module supports all method that Cache::Memcached::Fast has.

# DESCRIPTION

Cache::Memcached::Fast::Safe is subclass of [Cache::Memcached::Fast](https://metacpan.org/pod/Cache::Memcached::Fast).
Cache::Memcached::Fast::Safe sanitizes all requested keys for against 
memcached injection problem. and call disconnect\_all automatically after fork 
for fork-safe.

# ADDITIONAL METHOD

- get\_or\_set($key:Str, $callback:CodeRef \[,$expires:Num\])

    Get a cache value for $key if it's already cached. If can not retrieve cache values, execute $callback and cache with $expires seconds.

        $memcached->get_or_set('key:941',sub {
          DB->retrieve(941)
        },10);

    callback can also return expires sec.

        $memcached->get_or_set('key:941',sub {
          my $val = DB->retrieve(941);
          return ($val, 10)
        });

# CUSTOMIZE Sanitizer

This module allow to change sanitizing behavior through $Cache::Memcached::Fast::Safe::SANITIZE\_METHOD.
Default sanitizer is

    use bytes;
    my %escapes = map { chr($_) => sprintf('%%%02X', $_) } (0x00..0x20, 0x7f..0xff);
    local $Cache::Memcached::Fast::Safe::SANITIZE_METHOD = sub {
        my $key = shift;
        $key =~ s/([\x00-\x20\x7f-\xff])/$escapes{$1}/ge;
        if ( length $key > 200 ) {
            $key = sha1_hex($key);
        }
        $key;
    };

# AUTHOR

Masahiro Nagano <kazeburo {at} gmail.com>

# SEE ALSO

[Cache::Memcached::Fast](https://metacpan.org/pod/Cache::Memcached::Fast), [http://gihyo.jp/dev/feature/01/memcached\_advanced/0002](http://gihyo.jp/dev/feature/01/memcached_advanced/0002) (Japanese)

# LICENSE

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