diff --git a/README.md b/README.md index f4e73da0d0..3c6bf74346 100644 --- a/README.md +++ b/README.md @@ -301,7 +301,7 @@ func main() { ### Buffer Size Configuration -go-redis uses 0.5MiB read and write buffers by default for optimal performance. For high-throughput applications or large pipelines, you can customize buffer sizes: +go-redis uses 32KiB read and write buffers by default for optimal performance. For high-throughput applications or large pipelines, you can customize buffer sizes: ```go rdb := redis.NewClient(&redis.Options{ @@ -376,7 +376,7 @@ You can find further details in the [query dialect documentation](https://redis. #### Custom buffer sizes Prior to v9.12, the buffer size was the default go value of 4096 bytes. Starting from v9.12, -go-redis uses 256KiB read and write buffers by default for optimal performance. +go-redis uses 32KiB read and write buffers by default for optimal performance. For high-throughput applications or large pipelines, you can customize buffer sizes: ```go diff --git a/internal/pool/buffer_size_test.go b/internal/pool/buffer_size_test.go index f2e4b30c2a..7f4bd37ee4 100644 --- a/internal/pool/buffer_size_test.go +++ b/internal/pool/buffer_size_test.go @@ -34,12 +34,12 @@ var _ = Describe("Buffer Size Configuration", func() { Expect(err).NotTo(HaveOccurred()) defer connPool.CloseConn(cn) - // Check that default buffer sizes are used (256KiB) + // Check that default buffer sizes are used (32KiB) writerBufSize := getWriterBufSizeUnsafe(cn) readerBufSize := getReaderBufSizeUnsafe(cn) - Expect(writerBufSize).To(Equal(proto.DefaultBufferSize)) // Default 256KiB buffer size - Expect(readerBufSize).To(Equal(proto.DefaultBufferSize)) // Default 256KiB buffer size + Expect(writerBufSize).To(Equal(proto.DefaultBufferSize)) // Default 32KiB buffer size + Expect(readerBufSize).To(Equal(proto.DefaultBufferSize)) // Default 32KiB buffer size }) It("should use custom buffer sizes when specified", func() { @@ -79,16 +79,16 @@ var _ = Describe("Buffer Size Configuration", func() { Expect(err).NotTo(HaveOccurred()) defer connPool.CloseConn(cn) - // Check that default buffer sizes are used (256KiB) + // Check that default buffer sizes are used (32KiB) writerBufSize := getWriterBufSizeUnsafe(cn) readerBufSize := getReaderBufSizeUnsafe(cn) - Expect(writerBufSize).To(Equal(proto.DefaultBufferSize)) // Default 256KiB buffer size - Expect(readerBufSize).To(Equal(proto.DefaultBufferSize)) // Default 256KiB buffer size + Expect(writerBufSize).To(Equal(proto.DefaultBufferSize)) // Default 32KiB buffer size + Expect(readerBufSize).To(Equal(proto.DefaultBufferSize)) // Default 32KiB buffer size }) - It("should use 256KiB default buffer sizes for standalone NewConn", func() { - // Test that NewConn (without pool) also uses 256KiB buffers + It("should use 32KiB default buffer sizes for standalone NewConn", func() { + // Test that NewConn (without pool) also uses 32KiB buffers netConn := newDummyConn() cn := pool.NewConn(netConn) defer cn.Close() @@ -96,11 +96,11 @@ var _ = Describe("Buffer Size Configuration", func() { writerBufSize := getWriterBufSizeUnsafe(cn) readerBufSize := getReaderBufSizeUnsafe(cn) - Expect(writerBufSize).To(Equal(proto.DefaultBufferSize)) // Default 256KiB buffer size - Expect(readerBufSize).To(Equal(proto.DefaultBufferSize)) // Default 256KiB buffer size + Expect(writerBufSize).To(Equal(proto.DefaultBufferSize)) // Default 32KiB buffer size + Expect(readerBufSize).To(Equal(proto.DefaultBufferSize)) // Default 32KiB buffer size }) - It("should use 256KiB defaults even when pool is created directly without buffer sizes", func() { + It("should use 32KiB defaults even when pool is created directly without buffer sizes", func() { // Test the scenario where someone creates a pool directly (like in tests) // without setting ReadBufferSize and WriteBufferSize connPool = pool.NewConnPool(&pool.Options{ @@ -114,12 +114,12 @@ var _ = Describe("Buffer Size Configuration", func() { Expect(err).NotTo(HaveOccurred()) defer connPool.CloseConn(cn) - // Should still get 256KiB defaults because NewConnPool sets them + // Should still get 32KiB defaults because NewConnPool sets them writerBufSize := getWriterBufSizeUnsafe(cn) readerBufSize := getReaderBufSizeUnsafe(cn) - Expect(writerBufSize).To(Equal(proto.DefaultBufferSize)) // Default 256KiB buffer size - Expect(readerBufSize).To(Equal(proto.DefaultBufferSize)) // Default 256KiB buffer size + Expect(writerBufSize).To(Equal(proto.DefaultBufferSize)) // Default 32KiB buffer size + Expect(readerBufSize).To(Equal(proto.DefaultBufferSize)) // Default 32KiB buffer size }) }) diff --git a/internal/pool/conn.go b/internal/pool/conn.go index 989ab10d23..6b02ddb0e3 100644 --- a/internal/pool/conn.go +++ b/internal/pool/conn.go @@ -37,11 +37,11 @@ func NewConnWithBufferSize(netConn net.Conn, readBufSize, writeBufSize int) *Con createdAt: time.Now(), } - // Use specified buffer sizes, or fall back to 0.5MiB defaults if 0 + // Use specified buffer sizes, or fall back to 32KiB defaults if 0 if readBufSize > 0 { cn.rd = proto.NewReaderSize(netConn, readBufSize) } else { - cn.rd = proto.NewReader(netConn) // Uses 0.5MiB default + cn.rd = proto.NewReader(netConn) // Uses 32KiB default } if writeBufSize > 0 { diff --git a/internal/proto/reader.go b/internal/proto/reader.go index 13ff25478f..654f2cabfc 100644 --- a/internal/proto/reader.go +++ b/internal/proto/reader.go @@ -12,8 +12,8 @@ import ( "github.com/redis/go-redis/v9/internal/util" ) -// DefaultBufferSize is the default size for read/write buffers (256 KiB). -const DefaultBufferSize = 256 * 1024 +// DefaultBufferSize is the default size for read/write buffers (32 KiB). +const DefaultBufferSize = 32 * 1024 // redis resp protocol data type. const ( diff --git a/options.go b/options.go index 9b09b7d7de..799cb53abc 100644 --- a/options.go +++ b/options.go @@ -135,14 +135,14 @@ type Options struct { // Larger buffers can improve performance for commands that return large responses. // Smaller buffers can improve memory usage for larger pools. // - // default: 256KiB (262144 bytes) + // default: 32KiB (32768 bytes) ReadBufferSize int // WriteBufferSize is the size of the bufio.Writer buffer for each connection. // Larger buffers can improve performance for large pipelines and commands with many arguments. // Smaller buffers can improve memory usage for larger pools. // - // default: 256KiB (262144 bytes) + // default: 32KiB (32768 bytes) WriteBufferSize int // PoolFIFO type of connection pool. diff --git a/osscluster.go b/osscluster.go index 8d839a0a6b..7ea80cb213 100644 --- a/osscluster.go +++ b/osscluster.go @@ -96,14 +96,14 @@ type ClusterOptions struct { // Larger buffers can improve performance for commands that return large responses. // Smaller buffers can improve memory usage for larger pools. // - // default: 256KiB (262144 bytes) + // default: 32KiB (32768 bytes) ReadBufferSize int // WriteBufferSize is the size of the bufio.Writer buffer for each connection. // Larger buffers can improve performance for large pipelines and commands with many arguments. // Smaller buffers can improve memory usage for larger pools. // - // default: 256KiB (262144 bytes) + // default: 32KiB (32768 bytes) WriteBufferSize int TLSConfig *tls.Config diff --git a/ring.go b/ring.go index 6c74031086..3381460abd 100644 --- a/ring.go +++ b/ring.go @@ -128,14 +128,14 @@ type RingOptions struct { // Larger buffers can improve performance for commands that return large responses. // Smaller buffers can improve memory usage for larger pools. // - // default: 256KiB (262144 bytes) + // default: 32KiB (32768 bytes) ReadBufferSize int // WriteBufferSize is the size of the bufio.Writer buffer for each connection. // Larger buffers can improve performance for large pipelines and commands with many arguments. // Smaller buffers can improve memory usage for larger pools. // - // default: 256KiB (262144 bytes) + // default: 32KiB (32768 bytes) WriteBufferSize int TLSConfig *tls.Config diff --git a/sentinel.go b/sentinel.go index 008f23cfe5..819ec19270 100644 --- a/sentinel.go +++ b/sentinel.go @@ -94,14 +94,14 @@ type FailoverOptions struct { // Larger buffers can improve performance for commands that return large responses. // Smaller buffers can improve memory usage for larger pools. // - // default: 256KiB (262144 bytes) + // default: 32KiB (32768 bytes) ReadBufferSize int // WriteBufferSize is the size of the bufio.Writer buffer for each connection. // Larger buffers can improve performance for large pipelines and commands with many arguments. // Smaller buffers can improve memory usage for larger pools. // - // default: 256KiB (262144 bytes) + // default: 32KiB (32768 bytes) WriteBufferSize int PoolFIFO bool diff --git a/universal.go b/universal.go index 763d50fa6d..02da3be82b 100644 --- a/universal.go +++ b/universal.go @@ -65,14 +65,14 @@ type UniversalOptions struct { // Larger buffers can improve performance for commands that return large responses. // Smaller buffers can improve memory usage for larger pools. // - // default: 256KiB (262144 bytes) + // default: 32KiB (32768 bytes) ReadBufferSize int // WriteBufferSize is the size of the bufio.Writer buffer for each connection. // Larger buffers can improve performance for large pipelines and commands with many arguments. // Smaller buffers can improve memory usage for larger pools. // - // default: 256KiB (262144 bytes) + // default: 32KiB (32768 bytes) WriteBufferSize int // PoolFIFO uses FIFO mode for each node connection pool GET/PUT (default LIFO).