From a57e5b0908eea8c9a2dbd0c0a0a36729afa5fc58 Mon Sep 17 00:00:00 2001 From: Dobrica Pavlinusic Date: Sat, 21 Mar 2009 22:20:51 +0000 Subject: [PATCH 1/1] setnx git-svn-id: svn+ssh://llin/home/dpavlin/private/svn/Redis@5 447b33ff-793d-4489-8442-9bea7d161be5 --- lib/Redis.pm | 9 +++++---- t/01-Redis.t | 16 ++++++++++++---- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/lib/Redis.pm b/lib/Redis.pm index bc65da9..d03416e 100644 --- a/lib/Redis.pm +++ b/lib/Redis.pm @@ -5,6 +5,7 @@ use strict; use IO::Socket::INET; use Data::Dump qw/dump/; +use Carp qw/confess/; =head1 NAME @@ -80,15 +81,15 @@ sub ping { =head2 set - $r->set( foo => 'bar' ); + $r->set( foo => 'bar', $new ); =cut sub set { - my ( $self, $k, $v ) = @_; - print $sock "SET $k " . length($v) . "\r\n$v\r\n"; + my ( $self, $k, $v, $new ) = @_; + print $sock ( $new ? "SETNX" : "SET" ) . " $k " . length($v) . "\r\n$v\r\n"; my $ok = <$sock>; - die dump($ok) unless $ok eq "+OK\r\n"; + confess dump($ok) unless $ok eq "+OK\r\n"; } =head2 get diff --git a/t/01-Redis.t b/t/01-Redis.t index 0d50d6d..1990e08 100755 --- a/t/01-Redis.t +++ b/t/01-Redis.t @@ -3,7 +3,7 @@ use warnings; use strict; -use Test::More tests => 93; +use Test::More tests => 18; use lib 'lib'; @@ -15,12 +15,20 @@ ok( my $o = Redis->new(), 'new' ); ok( $o->ping, 'ping' ); -ok( $o->set( foo => 'bar' ), 'set foo' ); -cmp_ok( $o->get( 'foo' ), 'eq', 'bar', 'get foo' ); +ok( $o->set( foo => 'bar' ), 'set foo => bar' ); + +eval { $o->set( foo => 'bar', 1 ) }; +ok( $@, 'set foo => bar new again failed' ); + +cmp_ok( $o->get( 'foo' ), 'eq', 'bar', 'get foo = bar' ); + +ok( $o->set( foo => 'baz' ), 'set foo => baz' ); + +cmp_ok( $o->get( 'foo' ), 'eq', 'baz', 'get foo = baz' ); ok( ! $o->get( 'non-existant' ), 'get non-existant' ); -foreach ( 0 .. 42 ) { +foreach ( 0 .. 3 ) { ok( $o->set( "key-$_" => $_ ), "set key-$_" ); cmp_ok( $o->get( "key-$_" ), 'eq', $_, "get key-$_" ); } -- 2.20.1