Apache-Session-Browseable
view release on metacpan or search on metacpan
lib/Apache/Session/Browseable/Redis.pm view on Meta::CPAN
package Apache::Session::Browseable::Redis;
use strict;
use Apache::Session;
use Apache::Session::Browseable::Store::Redis;
use Apache::Session::Generate::SHA256;
use Apache::Session::Lock::Null;
use Apache::Session::Serialize::JSON;
use Apache::Session::Browseable::_common;
our $VERSION = '1.3.18';
our @ISA = qw(Apache::Session);
sub populate {
my $self = shift;
$self->{object_store} = new Apache::Session::Browseable::Store::Redis $self;
$self->{lock_manager} = new Apache::Session::Lock::Null $self;
$self->{generate} = \&Apache::Session::Generate::SHA256::generate;
$self->{validate} = \&Apache::Session::Generate::SHA256::validate;
$self->{serialize} = \&Apache::Session::Serialize::JSON::serialize;
$self->{unserialize} = \&Apache::Session::Serialize::JSON::unserialize;
return $self;
}
sub unserialize {
my $session = shift;
my $tmp = { serialized => $session };
Apache::Session::Serialize::JSON::unserialize($tmp);
return $tmp->{data};
}
sub searchOn {
my ( $class, $args, $selectField, $value, @fields ) = @_;
my %res = ();
if ( $class->isIndexed( $args, $selectField ) ) {
my $redisObj = $class->_getRedis($args);
my @keys = $redisObj->smembers("${selectField}_$value");
foreach my $k (@keys) {
next unless ($k);
my $tmp = $redisObj->get($k);
next unless ($tmp);
eval {
$tmp = unserialize($tmp);
if (@fields) {
$res{$k}->{$_} = $tmp->{$_} foreach (@fields);
}
else {
$res{$k} = $tmp;
}
};
if ($@) {
print STDERR "Error in session $k: $@\n";
delete $res{$k};
}
}
}
else {
$class->get_key_from_all_sessions(
$args,
sub {
my $entry = shift;
my $id = shift;
return undef
unless ( defined $entry->{$selectField}
and $entry->{$selectField} eq $value );
if (@fields) {
$res{$id}->{$_} = $entry->{$_} foreach (@fields);
}
else {
$res{$id} = $entry;
}
undef;
}
);
}
return \%res;
( run in 0.671 second using v1.01-cache-2.11-cpan-39bf76dae61 )