Skip to content

Commit 77c96f9

Browse files
Added the option to enable/disable MULTI/EXEC on client side caching feature. Avoid cluster shards on standalone connection. (#36)
* Included CSC docs with examples * Added more context for CSC invalidation * Added CSC hits/evicts counter * Added the option to enable/disable MULTI/EXEC on client side caching feature. Avoid cluster shards on standalone connection. * Included CSC flow tests
1 parent 820ad17 commit 77c96f9

File tree

5 files changed

+67
-20
lines changed

5 files changed

+67
-20
lines changed

Makefile

+7-1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,12 @@ ifeq ($(GIT_DIRTY),)
2020
GIT_DIRTY:=$(shell git diff --no-ext-diff 2> /dev/null | wc -l)
2121
endif
2222

23+
GCFLAGS:=
24+
ifeq ($(DEBUG),1)
25+
GCFLAGS:=-gcflags="all=-N -l"
26+
endif
27+
28+
2329
.PHONY: all test coverage
2430
all: build
2531

@@ -29,7 +35,7 @@ build-coverage:
2935

3036
build:
3137
$(GOBUILD) \
32-
-ldflags="-X 'main.GitSHA1=$(GIT_SHA)' -X 'main.GitDirty=$(GIT_DIRTY)'" .
38+
-ldflags="-X 'main.GitSHA1=$(GIT_SHA)'-X 'main.GitDirty=$(GIT_DIRTY)'" $(GCFLAGS) .
3339

3440
build-race:
3541
$(GOBUILDRACE) \

go.mod

+2-1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ require (
1313
require (
1414
github.com/tilinna/clock v1.0.2 // indirect
1515
golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6 // indirect
16+
golang.org/x/sys v0.13.0 // indirect
1617
)
1718

18-
replace github.com/redis/rueidis => github.com/filipecosta90/rueidis v0.0.0-20230927221707-2d17d4ee82e3
19+
replace github.com/redis/rueidis => github.com/filipecosta90/rueidis v0.0.0-20231129020706-4fbfa4b6c663

go.sum

+29-7
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,30 @@ github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ3
77
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
88
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
99
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
10-
github.com/filipecosta90/rueidis v0.0.0-20230927221707-2d17d4ee82e3 h1:slwoBsdbPe8JqOhlEaEZzkog/PLSwAQGuW3QtkIRsNM=
11-
github.com/filipecosta90/rueidis v0.0.0-20230927221707-2d17d4ee82e3/go.mod h1:8B+r5wdnjwK3lTFml5VtxjzGOQAC+5UmujoD12pDrEo=
10+
github.com/filipecosta90/rueidis v0.0.0-20231108003426-1ad576850596 h1:iUU5bL8Ztund2/NsvWp0agEL9wUX2UANMHgSEGBLiW0=
11+
github.com/filipecosta90/rueidis v0.0.0-20231108003426-1ad576850596/go.mod h1:8EOzvsg3o5dUDitRj4vpsolUKkSIvFz88PeQnqwTVk0=
12+
github.com/filipecosta90/rueidis v0.0.0-20231128153319-0edd62ab07b9 h1:UXuL0zzErGsv9DxQcabULmTUE551E94QIuRHv3usoRA=
13+
github.com/filipecosta90/rueidis v0.0.0-20231128153319-0edd62ab07b9/go.mod h1:8EOzvsg3o5dUDitRj4vpsolUKkSIvFz88PeQnqwTVk0=
14+
github.com/filipecosta90/rueidis v0.0.0-20231128154811-7d437c9947bd h1:M4+zNrbNM1ATsURMkFucsnkxxqTJrGFP+5SoE99WhU0=
15+
github.com/filipecosta90/rueidis v0.0.0-20231128154811-7d437c9947bd/go.mod h1:8EOzvsg3o5dUDitRj4vpsolUKkSIvFz88PeQnqwTVk0=
16+
github.com/filipecosta90/rueidis v0.0.0-20231128155605-75bd2dbb36ec h1:twpyLLucJ/KJGBNotqV7fJqmJIQDLlC/HJFbJZfjvhw=
17+
github.com/filipecosta90/rueidis v0.0.0-20231128155605-75bd2dbb36ec/go.mod h1:8EOzvsg3o5dUDitRj4vpsolUKkSIvFz88PeQnqwTVk0=
18+
github.com/filipecosta90/rueidis v0.0.0-20231128155953-c5a5fcdd82a2 h1:LtCI9QyVQVvsfWfPRomEtYyKIZQQuZk3d9crOXhwaqk=
19+
github.com/filipecosta90/rueidis v0.0.0-20231128155953-c5a5fcdd82a2/go.mod h1:8EOzvsg3o5dUDitRj4vpsolUKkSIvFz88PeQnqwTVk0=
20+
github.com/filipecosta90/rueidis v0.0.0-20231128160118-cdc18dddc040 h1:lYKygHbuIQtHNm1fUk1j8Y72EDkPY1jPTOOQ0Xv6kzM=
21+
github.com/filipecosta90/rueidis v0.0.0-20231128160118-cdc18dddc040/go.mod h1:8EOzvsg3o5dUDitRj4vpsolUKkSIvFz88PeQnqwTVk0=
22+
github.com/filipecosta90/rueidis v0.0.0-20231128160711-f6cbcd08afaa h1:jAgSUykSwKY2vx8vL663zcRfrVCCS4EQVcXOPBDQkWc=
23+
github.com/filipecosta90/rueidis v0.0.0-20231128160711-f6cbcd08afaa/go.mod h1:8EOzvsg3o5dUDitRj4vpsolUKkSIvFz88PeQnqwTVk0=
24+
github.com/filipecosta90/rueidis v0.0.0-20231128161500-345130b415c4 h1:AJYJUl6wRFEdMLCTNccARbHaNS4ia6pue294eamZD2A=
25+
github.com/filipecosta90/rueidis v0.0.0-20231128161500-345130b415c4/go.mod h1:8EOzvsg3o5dUDitRj4vpsolUKkSIvFz88PeQnqwTVk0=
26+
github.com/filipecosta90/rueidis v0.0.0-20231128162428-6ad1fe0d0899 h1:2d++oVwMuzkm5ptbX7ZZe30+0DpATQ6G1HS8diF4vAs=
27+
github.com/filipecosta90/rueidis v0.0.0-20231128162428-6ad1fe0d0899/go.mod h1:8EOzvsg3o5dUDitRj4vpsolUKkSIvFz88PeQnqwTVk0=
28+
github.com/filipecosta90/rueidis v0.0.0-20231128165119-1329d1c7101c h1:trMX28uA2CWYQ51YXdwXbMu3rnXRKm33uRkA3/wXdOY=
29+
github.com/filipecosta90/rueidis v0.0.0-20231128165119-1329d1c7101c/go.mod h1:8EOzvsg3o5dUDitRj4vpsolUKkSIvFz88PeQnqwTVk0=
30+
github.com/filipecosta90/rueidis v0.0.0-20231129020248-c71291edddb9 h1:K8aDQCc2tEdelLYaaZr2PaMLyfp7o2xZItqkUDggxj4=
31+
github.com/filipecosta90/rueidis v0.0.0-20231129020248-c71291edddb9/go.mod h1:8EOzvsg3o5dUDitRj4vpsolUKkSIvFz88PeQnqwTVk0=
32+
github.com/filipecosta90/rueidis v0.0.0-20231129020706-4fbfa4b6c663 h1:Ty498pDEDQ52dd7RS86uNyNN+x1H/4lRVVXwYjnEKnk=
33+
github.com/filipecosta90/rueidis v0.0.0-20231129020706-4fbfa4b6c663/go.mod h1:8EOzvsg3o5dUDitRj4vpsolUKkSIvFz88PeQnqwTVk0=
1234
github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
1335
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
1436
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
@@ -24,11 +46,9 @@ github.com/mattn/go-shellwords v1.0.12/go.mod h1:EZzvwXDESEeg03EKmM+RmDnNOPKG4lL
2446
github.com/mediocregopher/radix/v4 v4.1.2 h1:Pj7XnNK5WuzzFy63g98pnccainAePK+aZNQRvxSvj2I=
2547
github.com/mediocregopher/radix/v4 v4.1.2/go.mod h1:ajchozX/6ELmydxWeWM6xCFHVpZ4+67LXHOTOVR0nCE=
2648
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
27-
github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI=
49+
github.com/onsi/gomega v1.28.0 h1:i2rg/p9n/UqIDAMFUJ6qIUUMcsqOuUHgbpbu235Vr1c=
2850
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
2951
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
30-
github.com/redis/rueidis v1.0.19 h1:s65oWtotzlIFN8eMPhyYwxlwLR1lUdhza2KtWprKYSo=
31-
github.com/redis/rueidis v1.0.19/go.mod h1:8B+r5wdnjwK3lTFml5VtxjzGOQAC+5UmujoD12pDrEo=
3252
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
3353
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
3454
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
@@ -54,14 +74,16 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB
5474
golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
5575
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
5676
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
57-
golang.org/x/net v0.12.0 h1:cfawfvKITfUsFCeJIHJrbSxpeu/E81khclypR0GVT50=
77+
golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM=
5878
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
5979
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
6080
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
6181
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
6282
golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
83+
golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE=
84+
golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
6385
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
64-
golang.org/x/text v0.11.0 h1:LAntKIrcmeSKERyiOh0XMV39LXS8IE9UL2yP7+f5ij4=
86+
golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k=
6587
golang.org/x/time v0.0.0-20191024005414-555d28b269f0 h1:/5xXl8Y5W96D+TtHSlonuFqGHIWVuyCkGJLwGh9JJFs=
6688
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
6789
golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=

redis-bechmark-go.go

+26-11
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ import (
1818
"time"
1919
)
2020

21-
func benchmarkRoutine(radixClient Client, ruedisClient rueidis.Client, useRuedis, useCSC, enableMultiExec bool, datapointsChan chan datapoint, continueOnError bool, cmdS [][]string, commandsCDF []float32, keyspacelen, datasize, number_samples uint64, loop bool, debug_level int, wg *sync.WaitGroup, keyplace, dataplace []int, readOnly []bool, useLimiter bool, rateLimiter *rate.Limiter, waitReplicas, waitReplicasMs int, cscDuration time.Duration) {
21+
func benchmarkRoutine(radixClient Client, ruedisClient rueidis.Client, useRuedis, useCSC, enableMultiExec bool, datapointsChan chan datapoint, continueOnError bool, cmdS [][]string, commandsCDF []float32, keyspacelen, datasize, number_samples uint64, loop bool, debug_level int, wg *sync.WaitGroup, keyplace, dataplace []int, readOnly []bool, useLimiter bool, rateLimiter *rate.Limiter, waitReplicas, waitReplicasMs int, cacheOptions *rueidis.CacheOptions) {
22+
2223
defer wg.Done()
2324
for i := 0; uint64(i) < number_samples || loop; i++ {
2425
cmdPos := sample(commandsCDF)
@@ -32,15 +33,15 @@ func benchmarkRoutine(radixClient Client, ruedisClient rueidis.Client, useRuedis
3233
time.Sleep(r.Delay())
3334
}
3435
if useRuedis {
35-
sendCmdLogicRuedis(ruedisClient, newCmdS, enableMultiExec, datapointsChan, continueOnError, debug_level, useCSC, isReadOnly, cscDuration, waitReplicas, waitReplicasMs)
36+
sendCmdLogicRuedis(ruedisClient, newCmdS, enableMultiExec, datapointsChan, continueOnError, debug_level, useCSC, isReadOnly, cacheOptions, waitReplicas, waitReplicasMs)
3637
} else {
3738
sendCmdLogicRadix(radixClient, newCmdS, enableMultiExec, key, datapointsChan, continueOnError, debug_level, waitReplicas, waitReplicasMs)
3839

3940
}
4041
}
4142
}
4243

43-
func sendCmdLogicRuedis(ruedisClient rueidis.Client, newCmdS []string, enableMultiExec bool, datapointsChan chan datapoint, continueOnError bool, debug_level int, useCSC, isReadOnly bool, cscDuration time.Duration, waitReplicas, waitReplicasMs int) {
44+
func sendCmdLogicRuedis(ruedisClient rueidis.Client, newCmdS []string, enableMultiExec bool, datapointsChan chan datapoint, continueOnError bool, debug_level int, useCSC, isReadOnly bool, cacheOptions *rueidis.CacheOptions, waitReplicas, waitReplicasMs int) {
4445
ctx := context.Background()
4546
var startT time.Time
4647
var endT time.Time
@@ -55,9 +56,15 @@ func sendCmdLogicRuedis(ruedisClient rueidis.Client, newCmdS []string, enableMul
5556
}
5657
}
5758
if useCSC && isReadOnly {
58-
startT = time.Now()
59-
redisResult = ruedisClient.DoCache(ctx, arbitrary.Cache(), cscDuration)
60-
endT = time.Now()
59+
if cacheOptions.UseMultiExec && cacheOptions.UseServerPTTL {
60+
startT = time.Now()
61+
redisResult = ruedisClient.DoCache(ctx, arbitrary.Cache(), cacheOptions.ClientTTL)
62+
endT = time.Now()
63+
} else {
64+
startT = time.Now()
65+
redisResult = ruedisClient.DoCacheWithOptions(ctx, arbitrary.Cache(), *cacheOptions)
66+
endT = time.Now()
67+
}
6168
} else if enableMultiExec {
6269
cmds := make(rueidis.Commands, 0, 3)
6370
cmds = append(cmds, ruedisClient.B().Multi().Build())
@@ -190,8 +197,13 @@ func main() {
190197
betweenClientsDelay := flag.Duration("between-clients-duration", time.Millisecond*0, "Between each client creation, wait this time.")
191198
version := flag.Bool("v", false, "Output version and exit")
192199
verbose := flag.Bool("verbose", false, "Output verbose info")
193-
cscEnabled := flag.Bool("csc", false, "Enable client side caching")
194200
useRuedis := flag.Bool("rueidis", false, "Use rueidis as the vanilla underlying client.")
201+
cscEnabled := flag.Bool("csc", false, "Enable client side caching")
202+
// TODO: add this feature to check locking overhead
203+
// cscDisableTrackInvalidations := flag.Bool("csc-disable-track-invalidations", false, "Disable CSC tracking")
204+
cscUseMultiExec := flag.Bool("csc-use-multi-exec", false, "Use CSC wrapped in MULTI/EXEC")
205+
// TODO: add this feature
206+
// cscUseServerPTTL := flag.Bool("csc-use-server-pttl", false, "Use CSC wrapped in with PTTL expiration info")
195207
cscDuration := flag.Duration("csc-ttl", time.Minute, "Client side cache ttl for cached entries")
196208
clientKeepAlive := flag.Duration("client-keepalive", time.Minute, "Client keepalive")
197209
cscSizeBytes := flag.Int("csc-per-client-bytes", rueidis.DefaultCacheBytes, "client side cache size that bind to each TCP connection to a single redis instance")
@@ -335,27 +347,30 @@ func main() {
335347
AlwaysRESP2: alwaysRESP2,
336348
DisableCache: !*cscEnabled,
337349
BlockingPoolSize: 0,
338-
PipelineMultiplex: 0,
350+
PipelineMultiplex: -1,
339351
RingScaleEachConn: 1,
340352
ReadBufferEachConn: 1024,
341353
WriteBufferEachConn: 1024,
342354
CacheSizeEachConn: *cscSizeBytes,
343355
OnInvalidations: invalidationFunction,
356+
ForceSingleClient: !*clusterMode,
344357
}
345358
clientOptions.Dialer.KeepAlive = *clientKeepAlive
346359
ruedisClient, err = rueidis.NewClient(clientOptions)
360+
cacheOptions := rueidis.CacheOptions{UseMultiExec: *cscUseMultiExec, UseServerPTTL: *cscUseMultiExec, ClientTTL: *cscDuration}
361+
347362
if err != nil {
348363
panic(err)
349364
}
350-
go benchmarkRoutine(radixStandalone, ruedisClient, *useRuedis, *cscEnabled, *multi, datapointsChan, *continueonerror, cmds, cdf, *keyspacelen, *datasize, samplesPerClient, *loop, int(*debug), &wg, cmdKeyplaceHolderPos, cmdDataplaceHolderPos, cmdReadOnly, useRateLimiter, rateLimiter, *waitReplicas, *waitReplicasMs, *cscDuration)
365+
go benchmarkRoutine(radixStandalone, ruedisClient, *useRuedis, *cscEnabled, *multi, datapointsChan, *continueonerror, cmds, cdf, *keyspacelen, *datasize, samplesPerClient, *loop, int(*debug), &wg, cmdKeyplaceHolderPos, cmdDataplaceHolderPos, cmdReadOnly, useRateLimiter, rateLimiter, *waitReplicas, *waitReplicasMs, &cacheOptions)
351366
} else {
352367
// legacy radix code
353368
if *clusterMode {
354369
cluster = getOSSClusterConn(connectionStr, opts, 1)
355-
go benchmarkRoutine(cluster, ruedisClient, *useRuedis, *cscEnabled, *multi, datapointsChan, *continueonerror, cmds, cdf, *keyspacelen, *datasize, samplesPerClient, *loop, int(*debug), &wg, cmdKeyplaceHolderPos, cmdDataplaceHolderPos, cmdReadOnly, useRateLimiter, rateLimiter, *waitReplicas, *waitReplicasMs, *cscDuration)
370+
go benchmarkRoutine(cluster, ruedisClient, *useRuedis, *cscEnabled, *multi, datapointsChan, *continueonerror, cmds, cdf, *keyspacelen, *datasize, samplesPerClient, *loop, int(*debug), &wg, cmdKeyplaceHolderPos, cmdDataplaceHolderPos, cmdReadOnly, useRateLimiter, rateLimiter, *waitReplicas, *waitReplicasMs, nil)
356371
} else {
357372
radixStandalone = getStandaloneConn(connectionStr, opts, 1)
358-
go benchmarkRoutine(radixStandalone, ruedisClient, *useRuedis, *cscEnabled, *multi, datapointsChan, *continueonerror, cmds, cdf, *keyspacelen, *datasize, samplesPerClient, *loop, int(*debug), &wg, cmdKeyplaceHolderPos, cmdDataplaceHolderPos, cmdReadOnly, useRateLimiter, rateLimiter, *waitReplicas, *waitReplicasMs, *cscDuration)
373+
go benchmarkRoutine(radixStandalone, ruedisClient, *useRuedis, *cscEnabled, *multi, datapointsChan, *continueonerror, cmds, cdf, *keyspacelen, *datasize, samplesPerClient, *loop, int(*debug), &wg, cmdKeyplaceHolderPos, cmdDataplaceHolderPos, cmdReadOnly, useRateLimiter, rateLimiter, *waitReplicas, *waitReplicasMs, nil)
359374
}
360375
}
361376

redis-bechmark-go_test.go

+3
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,9 @@ func TestGecko(t *testing.T) {
110110
{"run with key placeholder rueidis", 0, 10, 1000, []string{"-p", "6379", "-rueidis", "-c", "10", "-n", "1000", "-r", "10", "-rps", "10000", "HSET", "hash:__key__", "field", "value"}},
111111
{"run with multiple commands", 0, 20, 1000, []string{"-p", "6379", "-c", "10", "-n", "1000", "-r", "10", "-rps", "10000", "-cmd", "HSET hash:__key__ field value", "-cmd-ratio", "0.5", "-cmd", "SET string:__key__ value", "-cmd-ratio", "0.5"}},
112112
{"run with multiple commands rueidis", 0, 20, 1000, []string{"-p", "6379", "-rueidis", "-c", "10", "-n", "1000", "-r", "10", "-rps", "10000", "-cmd", "HSET hash:__key__ field value", "-cmd-ratio", "0.5", "-cmd", "SET string:__key__ value", "-cmd-ratio", "0.5"}},
113+
{"run with multiple commands rueidis CSC", 0, 20, 1000, []string{"-p", "6379", "-rueidis", "-c", "10", "-n", "1000", "-r", "10", "-rps", "10000", "-cmd", "HSET hash:__key__ field value", "-csc", "-cmd-ratio", "0.5", "-cmd", "SET string:__key__ value", "-cmd-ratio", "0.5"}},
114+
{"run with multiple commands rueidis CSC with MULTI/EXEC", 0, 20, 1000, []string{"-p", "6379", "-rueidis", "-c", "10", "-n", "1000", "-r", "10", "-rps", "10000", "-cmd", "HSET hash:__key__ field value", "-csc", "-csc-use-multi-exec", "-cmd-ratio", "0.5", "-cmd", "SET string:__key__ value", "-cmd-ratio", "0.5"}},
115+
113116
{"bad run", 2, 0, 0, []string{"-p", "xx"}},
114117
}
115118
host, password := getTestConnectionDetails()

0 commit comments

Comments
 (0)