]> git.saurik.com Git - redis.git/blobdiff - client-libraries/perl/lib/Redis/Hash.pm
New file dump format, perl client library added
[redis.git] / client-libraries / perl / lib / Redis / Hash.pm
diff --git a/client-libraries/perl/lib/Redis/Hash.pm b/client-libraries/perl/lib/Redis/Hash.pm
new file mode 100644 (file)
index 0000000..e5f8f70
--- /dev/null
@@ -0,0 +1,70 @@
+package Redis::Hash;
+
+use strict;
+use warnings;
+
+use Tie::Hash;
+use base qw/Redis Tie::StdHash/;
+
+use Data::Dump qw/dump/;
+
+=head1 NAME
+
+Redis::Hash - tie perl hashes into Redis
+
+=head1 SYNOPSYS
+
+  tie %name, 'Redis::Hash', 'prefix';
+
+=cut
+
+# mandatory methods
+sub TIEHASH {
+       my ($class,$name) = @_;
+       my $self = Redis->new;
+       $name .= ':' if $name;
+       $self->{name} = $name || '';
+       bless $self => $class;
+}
+
+sub STORE {
+       my ($self,$key,$value) = @_;
+       $self->set( $self->{name} . $key, $value );
+}
+
+sub FETCH {
+       my ($self,$key) = @_;
+       $self->get( $self->{name} . $key );
+}
+
+sub FIRSTKEY {
+       my $self = shift;
+       $self->{keys} = [ $self->keys( $self->{name} . '*' ) ];
+       $self->NEXTKEY;
+} 
+
+sub NEXTKEY {
+       my $self = shift;
+       my $key = shift @{ $self->{keys} } || return;
+       my $name = $self->{name};
+       $key =~ s{^$name}{} || warn "can't strip $name from $key";
+       return $key;
+}
+
+sub EXISTS {
+       my ($self,$key) = @_;
+       $self->exists( $self->{name} . $key );
+}
+
+sub DELETE {
+       my ($self,$key) = @_;
+       $self->del( $self->{name} . $key );
+}
+
+sub CLEAR {
+       my ($self) = @_;
+       $self->del( $_ ) foreach ( $self->keys( $self->{name} . '*' ) );
+       $self->{keys} = [];
+}
+
+1;