/[Redis.pre-github]/lib/Redis.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /lib/Redis.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1 by dpavlin, Sat Mar 21 20:20:45 2009 UTC revision 7 by dpavlin, Sat Mar 21 22:38:56 2009 UTC
# Line 3  package Redis; Line 3  package Redis;
3  use warnings;  use warnings;
4  use strict;  use strict;
5    
6    use IO::Socket::INET;
7    use Data::Dump qw/dump/;
8    use Carp qw/confess/;
9    
10  =head1 NAME  =head1 NAME
11    
12  Redis - The great new Redis!  Redis - The great new Redis!
13    
 =head1 VERSION  
   
 Version 0.01  
   
14  =cut  =cut
15    
16  our $VERSION = '0.01';  our $VERSION = '0.01';
# Line 18  our $VERSION = '0.01'; Line 18  our $VERSION = '0.01';
18    
19  =head1 SYNOPSIS  =head1 SYNOPSIS
20    
21  Quick summary of what the module does.  Pure perl bindings for L<http://code.google.com/p/redis/>
   
 Perhaps a little code snippet.  
22    
23      use Redis;      use Redis;
24    
25      my $foo = Redis->new();      my $r = Redis->new();
26      ...  
27    
 =head1 EXPORT  
28    
 A list of functions that can be exported.  You can delete this section  
 if you don't export anything, such as for a purely object-oriented module.  
29    
30  =head1 FUNCTIONS  =head1 FUNCTIONS
31    
32  =head2 function1  =head2 new
33    
34    =cut
35    
36    our $sock;
37    my $server = '127.0.0.1:6379';
38    
39    sub new {
40            my $class = shift;
41            my $self = {};
42            bless($self, $class);
43    
44            warn "# opening socket to $server";
45    
46            $sock ||= IO::Socket::INET->new(
47                    PeerAddr => $server,
48                    Proto => 'tcp',
49            ) || die $!;
50    
51            $self;
52    }
53    
54    =head1 Connection Handling
55    
56    =head2 quit
57    
58      $r->quit;
59    
60  =cut  =cut
61    
62  sub function1 {  sub quit {
63            my $self = shift;
64    
65            close( $sock ) || warn $!;
66  }  }
67    
68  =head2 function2  =head2 ping
69    
70      $r->ping || die "no server?";
71    
72    =cut
73    
74    sub ping {
75            print $sock "PING\r\n";
76            my $pong = <$sock>;
77            die "ping failed, got ", dump($pong) unless $pong eq "+PONG\r\n";
78    }
79    
80    =head1 Commands operating on string values
81    
82    =head2 set
83    
84      $r->set( foo => 'bar', $new );
85    
86    =cut
87    
88    sub set {
89            my ( $self, $k, $v, $new ) = @_;
90            print $sock ( $new ? "SETNX" : "SET" ) . " $k " . length($v) . "\r\n$v\r\n";
91            my $ok = <$sock>;
92            confess dump($ok) unless $ok eq "+OK\r\n";
93    }
94    
95    =head2 get
96    
97      my $value = $r->get( 'foo' );
98    
99    =cut
100    
101    sub get {
102            my ( $self, $k ) = @_;
103            print $sock "GET $k\r\n";
104            my $len = <$sock>;
105    #       warn "# len: ",dump($len);
106            return undef if $len eq "nil\r\n";
107            my $v;
108            read($sock, $v, $len) || die $!;
109    #       warn "# v: ",dump($v);
110            my $crlf;
111            read($sock, $crlf, 2); # skip cr/lf
112            return $v;
113    }
114    
115    =head2 incr
116    
117      $r->incr('counter');
118      $r->incr('tripplets', 3);
119    
120  =cut  =cut
121    
122  sub function2 {  sub incr {
123            my ( $self, $key, $value ) = @_;
124            if ( defined $value ) {
125                    print $sock "INCRBY $key $value\r\n";
126            } else {
127                    print $sock "INCR $key\r\n";
128            }
129            my $count = <$sock>;
130            warn "# $key = $count";
131            return $count;
132  }  }
133    
134  =head1 AUTHOR  =head1 AUTHOR

Legend:
Removed from v.1  
changed lines
  Added in v.7

  ViewVC Help
Powered by ViewVC 1.1.26