1
0
mirror of https://github.com/redis/go-redis.git synced 2025-06-12 14:21:52 +03:00

Properly read replies that are bigger than read buffer.

This commit is contained in:
Vladimir Mihailenco
2012-08-05 21:09:38 +03:00
parent 19a5db6632
commit b36e10bf80
3 changed files with 127 additions and 70 deletions

View File

@ -1539,63 +1539,63 @@ func (t *RedisTest) TestPipeliningFromGoroutines(c *C) {
func (t *RedisTest) TestIncrFromGoroutines(c *C) {
wg := &sync.WaitGroup{}
for i := int64(0); i < 1000; i++ {
for i := int64(0); i < 20000; i++ {
wg.Add(1)
go func() {
_, err := t.client.Incr("key").Reply()
_, err := t.client.Incr("TestIncrFromGoroutinesKey").Reply()
c.Check(err, IsNil)
wg.Done()
}()
}
wg.Wait()
n, err := t.client.Get("key").Reply()
n, err := t.client.Get("TestIncrFromGoroutinesKey").Reply()
c.Check(err, IsNil)
c.Check(n, Equals, "1000")
c.Check(n, Equals, "20000")
}
func (t *RedisTest) TestIncrPipeliningFromGoroutines(c *C) {
c.Skip("conn pool required")
multiClient := t.client.Multi()
wg := &sync.WaitGroup{}
for i := int64(0); i < 10000; i++ {
for i := int64(0); i < 20000; i++ {
wg.Add(1)
go func() {
t.client.Incr("key")
multiClient.Incr("TestIncrPipeliningFromGoroutinesKey")
wg.Done()
}()
}
wg.Wait()
reqs, err := t.client.RunQueued()
reqs, err := multiClient.RunQueued()
c.Check(err, IsNil)
c.Check(reqs, HasLen, 10000)
c.Check(reqs, HasLen, 20000)
n, err := t.client.Get("key").Reply()
n, err := t.client.Get("TestIncrPipeliningFromGoroutinesKey").Reply()
c.Check(err, IsNil)
c.Check(n, Equals, "10000")
c.Check(n, Equals, "20000")
}
func (t *RedisTest) TestIncrTransaction(c *C) {
c.Skip("conn pool required")
multiClient := t.client.Multi()
wg := &sync.WaitGroup{}
for i := int64(0); i < 10000; i++ {
for i := int64(0); i < 20000; i++ {
wg.Add(1)
go func() {
t.client.Incr("key")
multiClient.Incr("TestIncrTransactionKey")
wg.Done()
}()
}
wg.Wait()
reqs, err := t.client.Exec()
reqs, err := multiClient.Exec()
c.Check(err, IsNil)
c.Check(reqs, HasLen, 10000)
c.Check(reqs, HasLen, 20000)
n, err := t.client.Get("key").Reply()
n, err := t.client.Get("TestIncrTransactionKey").Reply()
c.Check(err, IsNil)
c.Check(n, Equals, "10000")
c.Check(n, Equals, "20000")
}
//------------------------------------------------------------------------------
@ -1632,7 +1632,7 @@ func (t *RedisTest) BenchmarkRedisSet(c *C) {
}
}
func (t *RedisTest) BenchmarkRedisGet(c *C) {
func (t *RedisTest) BenchmarkRedisGetNil(c *C) {
c.StopTimer()
for i := 0; i < 10; i++ {
@ -1648,6 +1648,25 @@ func (t *RedisTest) BenchmarkRedisGet(c *C) {
}
}
func (t *RedisTest) BenchmarkRedisGet(c *C) {
c.StopTimer()
_, err := t.client.Set("foo", "bar").Reply()
c.Check(err, IsNil)
for i := 0; i < 10; i++ {
v, err := t.client.Get("foo").Reply()
c.Check(err, IsNil)
c.Check(v, Equals, "bar")
}
c.StartTimer()
for i := 0; i < c.N; i++ {
t.client.Get("foo").Reply()
}
}
func (t *RedisTest) BenchmarkRedisWriteRead(c *C) {
c.StopTimer()
@ -1666,4 +1685,8 @@ func (t *RedisTest) BenchmarkRedisWriteRead(c *C) {
for i := 0; i < c.N; i++ {
t.client.WriteRead(req, conn)
}
c.StopTimer()
t.client.ConnPool.Add(conn)
c.StartTimer()
}