package Redis; use warnings; use strict; use IO::Socket::INET; use Data::Dump qw/dump/; use Carp qw/confess/; =head1 NAME Redis - The great new Redis! =cut our $VERSION = '0.01'; =head1 SYNOPSIS Pure perl bindings for L use Redis; my $r = Redis->new(); =head1 FUNCTIONS =head2 new =cut our $sock; my $server = '127.0.0.1:6379'; sub new { my $class = shift; my $self = {}; bless($self, $class); warn "# opening socket to $server"; $sock ||= IO::Socket::INET->new( PeerAddr => $server, Proto => 'tcp', ) || die $!; $self; } =head1 Connection Handling =head2 quit $r->quit; =cut sub quit { my $self = shift; close( $sock ) || warn $!; } =head2 ping $r->ping || die "no server?"; =cut sub ping { print $sock "PING\r\n"; my $pong = <$sock>; die "ping failed, got ", dump($pong) unless $pong eq "+PONG\r\n"; } =head1 Commands operating on string values =head2 set $r->set( foo => 'bar', $new ); =cut sub set { my ( $self, $k, $v, $new ) = @_; print $sock ( $new ? "SETNX" : "SET" ) . " $k " . length($v) . "\r\n$v\r\n"; my $ok = <$sock>; confess dump($ok) unless $ok eq "+OK\r\n"; } =head2 get my $value = $r->get( 'foo' ); =cut sub get { my ( $self, $k ) = @_; print $sock "GET $k\r\n"; my $len = <$sock>; # warn "# len: ",dump($len); return undef if $len eq "nil\r\n"; my $v; read($sock, $v, $len) || die $!; # warn "# v: ",dump($v); my $crlf; read($sock, $crlf, 2); # skip cr/lf return $v; } =head2 incr $r->incr('counter'); $r->incr('tripplets', 3); =cut sub incr { my ( $self, $key, $value ) = @_; if ( defined $value ) { print $sock "INCRBY $key $value\r\n"; } else { print $sock "INCR $key\r\n"; } my $count = <$sock>; warn "# $key = $count"; return $count; } =head1 AUTHOR Dobrica Pavlinusic, C<< >> =head1 BUGS Please report any bugs or feature requests to C, or through the web interface at L. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes. =head1 SUPPORT You can find documentation for this module with the perldoc command. perldoc Redis You can also look for information at: =over 4 =item * RT: CPAN's request tracker L =item * AnnoCPAN: Annotated CPAN documentation L =item * CPAN Ratings L =item * Search CPAN L =back =head1 ACKNOWLEDGEMENTS =head1 COPYRIGHT & LICENSE Copyright 2009 Dobrica Pavlinusic, all rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut 1; # End of Redis