Skip to content

Commit

Permalink
Use hashes.
Browse files Browse the repository at this point in the history
  • Loading branch information
Cory Watson authored and Cory Watson committed Sep 14, 2010
1 parent 6347699 commit 9cb1f49
Showing 1 changed file with 15 additions and 39 deletions.
54 changes: 15 additions & 39 deletions lib/CHI/Driver/Redis.pm
Expand Up @@ -43,45 +43,20 @@ sub fetch {
return unless $self->_verify_redis_connection;

my $eskey = uri_escape($key);
my $val = $self->redis->get($self->namespace."||$eskey");
my $val = $self->redis->hget($self->namespace, $eskey);
# Blindly turn off the damn UTF-8 flag because Redis.pm blindly
# turns it on. This prevents CHI from going crazy.
Encode::_utf8_off($val);

return $val;
}

sub XXfetch_multi_hashref {
my ($self, $keys) = @_;

return unless scalar(@{ $keys });

return unless $self->_verify_redis_connection;

my %kv;
foreach my $k (@{ $keys }) {
my $esk = uri_escape($k);
$kv{$self->namespace."||$esk"} = undef;
}

my @vals = $self->redis->mget(keys %kv);

my $count = 0;
my %resp;
foreach my $k (@{ $keys }) {
$resp{$k} = $vals[$count];
$count++;
}

return \%resp;
}

sub get_keys {
my ($self) = @_;

return unless $self->_verify_redis_connection;

my @keys = $self->redis->smembers($self->namespace);
my @keys = $self->redis->hkeys($self->namespace);

my @unesckeys = ();

Expand Down Expand Up @@ -112,8 +87,8 @@ sub remove {

my $skey = uri_escape($key);

$self->redis->srem($ns, $skey);
$self->redis->del("$ns||$skey");
# $self->redis->srem($ns, $skey);
$self->redis->hdel($ns, $skey);
}

sub store {
Expand All @@ -124,18 +99,18 @@ sub store {
my $ns = $self->namespace;

my $skey = uri_escape($key);
my $realkey = "$ns||$skey";
# my $realkey = "$ns||$skey";

$self->redis->sadd('chinamespaces', $ns);
unless($self->redis->sismember($ns, $skey)) {
$self->redis->sadd($ns, $skey) ;
}
$self->redis->set($realkey => $data);

if(defined($expires_at)) {
my $secs = $expires_at - time;
$self->redis->expire($realkey, $secs);
}
# unless($self->redis->sismember($ns, $skey)) {
# $self->redis->sadd($ns, $skey) ;
# }
$self->redis->hset($ns, $skey => $data);

# if(defined($expires_at)) {
# my $secs = $expires_at - time;
# $self->redis->expire($realkey, $secs);
# }
}

sub _verify_redis_connection {
Expand All @@ -152,6 +127,7 @@ sub _verify_redis_connection {
die "Ping failed.";
}
} catch {
print STDERR "$_\n";
warn "Error pinging redis, attempting to reconnect.\n";
};

Expand Down

1 comment on commit 9cb1f49

@karenetheridge
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This seems like a good change, but I am concerned that changing the underlying data format will break everyone who is currently using this module?

Also, does this change fix https://rt.cpan.org/Ticket/Display.html?id=78120 ?

Please sign in to comment.