You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
97 lines
1.8 KiB
97 lines
1.8 KiB
5 years ago
|
package redis
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"fmt"
|
||
|
"reflect"
|
||
|
"testing"
|
||
|
"time"
|
||
|
|
||
|
"github.com/bilibili/kratos/pkg/container/pool"
|
||
|
xtime "github.com/bilibili/kratos/pkg/time"
|
||
|
)
|
||
|
|
||
|
func TestRedis_Pipeline(t *testing.T) {
|
||
|
conf := &Config{
|
||
|
Name: "test",
|
||
|
Proto: "tcp",
|
||
|
Addr: testRedisAddr,
|
||
|
DialTimeout: xtime.Duration(1 * time.Second),
|
||
|
ReadTimeout: xtime.Duration(1 * time.Second),
|
||
|
WriteTimeout: xtime.Duration(1 * time.Second),
|
||
|
}
|
||
|
conf.Config = &pool.Config{
|
||
|
Active: 10,
|
||
|
Idle: 2,
|
||
|
IdleTimeout: xtime.Duration(90 * time.Second),
|
||
|
}
|
||
|
|
||
|
r := NewRedis(conf)
|
||
|
r.Do(context.TODO(), "FLUSHDB")
|
||
|
|
||
|
p := r.Pipeline()
|
||
|
|
||
|
for _, cmd := range testCommands {
|
||
|
p.Send(cmd.args[0].(string), cmd.args[1:]...)
|
||
|
}
|
||
|
|
||
|
replies, err := p.Exec(context.TODO())
|
||
|
|
||
|
i := 0
|
||
|
for replies.Next() {
|
||
|
cmd := testCommands[i]
|
||
|
actual, err := replies.Scan()
|
||
|
if err != nil {
|
||
|
t.Fatalf("Receive(%v) returned error %v", cmd.args, err)
|
||
|
}
|
||
|
if !reflect.DeepEqual(actual, cmd.expected) {
|
||
|
t.Errorf("Receive(%v) = %v, want %v", cmd.args, actual, cmd.expected)
|
||
|
}
|
||
|
i++
|
||
|
}
|
||
|
err = r.Close()
|
||
|
if err != nil {
|
||
|
t.Errorf("Close() error %v", err)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func ExamplePipeliner() {
|
||
|
r := NewRedis(testConfig)
|
||
|
defer r.Close()
|
||
|
|
||
|
pip := r.Pipeline()
|
||
|
pip.Send("SET", "hello", "world")
|
||
|
pip.Send("GET", "hello")
|
||
|
replies, err := pip.Exec(context.TODO())
|
||
|
if err != nil {
|
||
|
fmt.Printf("%#v\n", err)
|
||
|
}
|
||
|
for replies.Next() {
|
||
|
s, err := String(replies.Scan())
|
||
|
if err != nil {
|
||
|
fmt.Printf("err %#v\n", err)
|
||
|
}
|
||
|
fmt.Printf("%#v\n", s)
|
||
|
}
|
||
|
// Output:
|
||
|
// "OK"
|
||
|
// "world"
|
||
|
}
|
||
|
|
||
|
func BenchmarkRedisPipelineExec(b *testing.B) {
|
||
|
r := NewRedis(testConfig)
|
||
|
defer r.Close()
|
||
|
|
||
|
r.Do(context.TODO(), "SET", "abcde", "fghiasdfasdf")
|
||
|
|
||
|
b.ResetTimer()
|
||
|
for i := 0; i < b.N; i++ {
|
||
|
p := r.Pipeline()
|
||
|
p.Send("GET", "abcde")
|
||
|
_, err := p.Exec(context.TODO())
|
||
|
if err != nil {
|
||
|
b.Fatal(err)
|
||
|
}
|
||
|
}
|
||
|
}
|