MojoX-Session-Store-Redis
view release on metacpan or search on metacpan
lib/MojoX/Session/Store/Redis.pm view on Meta::CPAN
use base 'MojoX::Session::Store';
use namespace::clean;
__PACKAGE__->attr('redis');
__PACKAGE__->attr('redis_prefix');
__PACKAGE__->attr('_redis_dbid');
__PACKAGE__->attr('auto_purge');
=encoding utf8
=head1 NAME
MojoX::Session::Store::Redis - RedisDB Store for MojoX::Session
=cut
our $VERSION = '0.10';
sub new {
my ($class, $param) = @_;
my $self = $class->SUPER::new();
bless $self, $class;
$param ||= {};
$self->_redis_dbid(delete $param->{redis_dbid} || 0);
$self->redis_prefix(delete $param->{redis_prefix} || 'mojo-session');
$self->auto_purge( delete $param->{auto_purge} // 1 );
$self->redis($param->{redis} || Redis->new(%$param));
$self->redis->select($self->_redis_dbid);
return $self;
}
sub create {
my ($self, $sid, $expires, $data) = @_;
my $prefix = $self->redis_prefix;
$data = encode_json($data) if $data;
$self->redis->hmset("$prefix:$sid", 'sid' => $sid, 'data' => $data, 'expires' => $expires);
# ttl
if ( $self->auto_purge and $expires > 0 ) {
$self->redis->expire("$prefix:$sid", $expires - time);
}
# FIXME
# Check error
#~ require Data::Dumper;
#~ warn Data::Dumper::Dumper($err);
1;
}
sub update {
shift->create(@_);
}
sub load {
my ($self, $sid) = @_;
my $prefix = $self->redis_prefix;
my %session = $self->redis->hgetall("$prefix:$sid");
$session{'data'} = $session{'data'} ? decode_json($session{'data'}) : undef ;
return ($session{'expires'}, $session{'data'});
}
sub delete {
my ($self, $sid) = @_;
my $prefix = $self->redis_prefix;
$self->redis->del("$prefix:$sid");
return 1;
}
sub redis_dbid {
my ($self, $dbid) = @_;
return $self->_redis_dbid unless defined $dbid;
$self->_redis_dbid($dbid);
$self->redis->select( $self->_redis_dbid );
}
=head1 SYNOPSIS
my $session = MojoX::Session->new(
tx => $tx,
store => MojoX::Session::Store::Redis->new({
server => '127.0.0.1:6379',
redis_prefix => 'mojo-session',
redis_dbid => 0,
}),
transport => MojoX::Session::Transport::Cookie->new,
);
# see doc for MojoX::Session
# see doc for Redis
And later when you need to use it in Mojolicious Controller
my $session = $self->stash('mojox-session');
$session->load;
$session->create unless $session->sid;
#set
$session->data(
id => 5,
name => 'hoge',
( run in 1.362 second using v1.01-cache-2.11-cpan-39bf76dae61 )