+=head2 decr
+
+ $r->decr('counter');
+ $r->decr('tripplets', 3);
+
+=cut
+
+sub decr {
+ my ( $self, $key, $value ) = @_;
+ if ( defined $value ) {
+ print $sock "DECRBY $key $value\r\n";
+ } else {
+ print $sock "DECR $key\r\n";
+ }
+ _sock_result();
+}
+
+=head2 exists
+
+ $r->exists( 'key' ) && print "got key!";
+
+=cut
+
+sub exists {
+ my ( $self, $key ) = @_;
+ print $sock "EXISTS $key\r\n";
+ _sock_result();
+}
+
+=head2 del
+
+ $r->del( 'key' ) || warn "key doesn't exist";
+
+=cut
+
+sub del {
+ my ( $self, $key ) = @_;
+ print $sock "DEL $key\r\n";
+ _sock_result();
+}
+
+=head2 type
+
+ $r->type( 'key' ); # = string
+
+=cut
+
+sub type {
+ my ( $self, $key ) = @_;
+ print $sock "TYPE $key\r\n";
+ _sock_result();
+}
+
+=head1 Commands operating on the key space
+
+=head2 keys
+
+ my @keys = $r->keys( '*glob_pattern*' );
+
+=cut
+
+sub keys {
+ my ( $self, $glob ) = @_;
+ print $sock "KEYS $glob\r\n";
+ return split(/\s/, _sock_result_bulk());
+}
+
+=head2 randomkey
+
+ my $key = $r->randomkey;
+
+=cut
+
+sub randomkey {
+ my ( $self ) = @_;
+ print $sock "RANDOMKEY\r\n";
+ _sock_result();
+}
+
+=head2 rename
+
+ my $ok = $r->rename( 'old-key', 'new-key', $new );
+
+=cut
+
+sub rename {
+ my ( $self, $old, $new, $nx ) = @_;
+ print $sock "RENAME" . ( $nx ? 'NX' : '' ) . " $old $new\r\n";
+ _sock_ok();
+}
+
+=head2 dbsize
+
+ my $nr_keys = $r->dbsize;
+
+=cut
+
+sub dbsize {
+ my ( $self ) = @_;
+ print $sock "DBSIZE\r\n";
+ _sock_result();
+}
+
+=head1 Commands operating on lists
+
+=head2 rpush
+
+ $r->rpush( $key, $value );