From 0f371f4ddc5245fa9f596c3f19eade4b36589e68 Mon Sep 17 00:00:00 2001 From: Pedro Melo Date: Sat, 7 Aug 2010 12:53:26 +0100 Subject: [PATCH] Allow size of reads from socket to be tuned If you have big keys, values, or big responses, increasing read_size will improve your performance, by reducing the number of system calls we will make to read them. Defaults to 8Kb Signed-off-by: Pedro Melo --- lib/Redis.pm | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/lib/Redis.pm b/lib/Redis.pm index 3da5f28..ef4e53c 100644 --- a/lib/Redis.pm +++ b/lib/Redis.pm @@ -54,7 +54,9 @@ sub new { PeerAddr => $self->{server}, Proto => 'tcp', ) || confess("Could not connect to Redis server at $self->{server}: $!"); - $self->{rbuf} = ''; + + $self->{read_size} = 8192; + $self->{rbuf} = ''; $self->{is_subscriber} = 0; @@ -202,7 +204,9 @@ sub __read_sock { my $rbuf = \($self->{rbuf}); my ($data, $type) = ('', ''); - my $read_size = defined $len ? $len + 2 : 8192; + my $read_size = $self->{read_size}; + $read_size = $len + 2 if defined $len && $len + 2 > $read_size; + while (1) { ## Read NN bytes, strip \r\n at the end if (defined $len) { @@ -237,7 +241,7 @@ sub __can_read_sock { return 1 if $$rbuf; __fh_nonblocking($sock, 1); - my $bytes = sysread $sock, $$rbuf, 8192, length $$rbuf; + my $bytes = sysread $sock, $$rbuf, $self->{read_size}, length $$rbuf; __fh_nonblocking($sock, 0); return 1 if $bytes; return 0; -- 2.20.1