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.
		
		
		
		
		
			
		
			
				
					
					
						
							210 lines
						
					
					
						
							4.1 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							210 lines
						
					
					
						
							4.1 KiB
						
					
					
				| package redis3 | |
| 
 | |
| import ( | |
| 	"context" | |
| 	"fmt" | |
| 	"github.com/go-redis/redis/v8" | |
| 	"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)}) | |
| 	} | |
| }
 |