package redis3 import ( "context" "fmt" "github.com/redis/go-redis/v9" "github.com/stvp/tempredis" "strconv" "testing" "time" ) var names = []string{ "cassandra.in.sh", "cassandra", "debug-cql.bat", "nodetool", "nodetool.bat", "source-conf.ps1", "sstableloader", "sstableloader.bat", "sstablescrub", "sstablescrub.bat", "sstableupgrade", "sstableupgrade.bat", "sstableutil", "sstableutil.bat", "sstableverify", "sstableverify.bat", "stop-server", "stop-server.bat", "stop-server.ps1", "cassandra.in.bat", "cqlsh.py", "cqlsh", "cassandra.ps1", "cqlsh.bat", "debug-cql", "cassandra.bat", } func yTestNameList(t *testing.T) { server, err := tempredis.Start(tempredis.Config{}) if err != nil { panic(err) } defer server.Term() client := redis.NewClient(&redis.Options{ Network: "unix", Addr: server.Socket(), }) store := newSkipListElementStore("/yyy/bin", client) var data []byte for _, name := range names { nameList := LoadItemList(data, "/yyy/bin", client, store, maxNameBatchSizeLimit) nameList.WriteName(name) nameList.ListNames("", func(name string) bool { println(name) return true }) if nameList.HasChanges() { data = nameList.ToBytes() } println() } nameList := LoadItemList(data, "/yyy/bin", client, store, maxNameBatchSizeLimit) nameList.ListNames("", func(name string) bool { println(name) return true }) } func yBenchmarkNameList(b *testing.B) { server, err := tempredis.Start(tempredis.Config{}) if err != nil { panic(err) } defer server.Term() client := redis.NewClient(&redis.Options{ Network: "unix", Addr: server.Socket(), }) store := newSkipListElementStore("/yyy/bin", client) var data []byte for i := 0; i < b.N; i++ { nameList := LoadItemList(data, "/yyy/bin", client, store, maxNameBatchSizeLimit) nameList.WriteName(strconv.Itoa(i) + "namexxxxxxxxxxxxxxxxxxx") if nameList.HasChanges() { data = nameList.ToBytes() } } } func BenchmarkRedis(b *testing.B) { server, err := tempredis.Start(tempredis.Config{}) if err != nil { panic(err) } defer server.Term() client := redis.NewClient(&redis.Options{ Network: "unix", Addr: server.Socket(), }) for i := 0; i < b.N; i++ { client.ZAddNX(context.Background(), "/yyy/bin", redis.Z{Score: 0, Member: strconv.Itoa(i) + "namexxxxxxxxxxxxxxxxxxx"}) } } func xTestNameListAdd(t *testing.T) { server, err := tempredis.Start(tempredis.Config{}) if err != nil { panic(err) } defer server.Term() client := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", DB: 0, }) client.FlushAll(context.Background()) N := 364800 ts0 := time.Now() store := newSkipListElementStore("/y", client) var data []byte nameList := LoadItemList(data, "/y", client, store, 100000) for i := 0; i < N; i++ { nameList.WriteName(fmt.Sprintf("%8d", i)) } ts1 := time.Now() for i := 0; i < N; i++ { client.ZAddNX(context.Background(), "/x", redis.Z{Score: 0, Member: fmt.Sprintf("name %8d", i)}) } ts2 := time.Now() fmt.Printf("%v %v", ts1.Sub(ts0), ts2.Sub(ts1)) /* keys := client.Keys(context.Background(), "/*m").Val() for _, k := range keys { println("key", k) for i, v := range client.ZRangeByLex(context.Background(), k, &redis.ZRangeBy{ Min: "-", Max: "+", }).Val() { println(" ", i, v) } } */ } func xBenchmarkNameList(b *testing.B) { server, err := tempredis.Start(tempredis.Config{}) if err != nil { panic(err) } defer server.Term() client := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", DB: 0, }) store := newSkipListElementStore("/yyy/bin", client) var data []byte for i := 0; i < b.N; i++ { nameList := LoadItemList(data, "/yyy/bin", client, store, maxNameBatchSizeLimit) nameList.WriteName(fmt.Sprintf("name %8d", i)) if nameList.HasChanges() { data = nameList.ToBytes() } } } func xBenchmarkRedis(b *testing.B) { client := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", DB: 0, }) for i := 0; i < b.N; i++ { client.ZAddNX(context.Background(), "/xxx/bin", redis.Z{Score: 0, Member: fmt.Sprintf("name %8d", i)}) } }