mirror of
https://github.com/hibiken/asynq.git
synced 2025-10-26 11:16:12 +08:00
Add benchmark tests for rdb
This commit is contained in:
37
internal/rdb/benchmark_test.go
Normal file
37
internal/rdb/benchmark_test.go
Normal file
@@ -0,0 +1,37 @@
|
||||
package rdb
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/go-redis/redis/v7"
|
||||
h "github.com/hibiken/asynq/internal/asynqtest"
|
||||
"github.com/hibiken/asynq/internal/base"
|
||||
)
|
||||
|
||||
func BenchmarkDone(b *testing.B) {
|
||||
r := redis.NewClient(&redis.Options{
|
||||
Addr: "localhost:6379",
|
||||
DB: 8,
|
||||
})
|
||||
h.FlushDB(b, r)
|
||||
|
||||
// populate in-progress queue with messages
|
||||
var inProgress []*base.TaskMessage
|
||||
for i := 0; i < 40; i++ {
|
||||
inProgress = append(inProgress,
|
||||
h.NewTaskMessage("send_email", map[string]interface{}{"subject": "hello", "recipient_id": 123}))
|
||||
}
|
||||
h.SeedInProgressQueue(b, r, inProgress)
|
||||
|
||||
rdb := NewRDB(r)
|
||||
|
||||
b.ResetTimer()
|
||||
for n := 0; n < b.N; n++ {
|
||||
b.StopTimer()
|
||||
msg := h.NewTaskMessage("reindex", map[string]interface{}{"config": "path/to/config/file"})
|
||||
r.LPush(base.InProgressQueue, h.MustMarshal(b, msg))
|
||||
b.StartTimer()
|
||||
|
||||
rdb.Done(msg)
|
||||
}
|
||||
}
|
||||
@@ -74,8 +74,8 @@ func (r *RDB) Done(msg *base.TaskMessage) error {
|
||||
}
|
||||
// Note: LREM count ZERO means "remove all elements equal to val"
|
||||
// Note: Script will try removing the message by exact match first,
|
||||
// if the task is muated and exact match is not found, it'll fallback
|
||||
// to linear scan of the list and find a match with ID.
|
||||
// if the task is mutated and exact match is not found, it'll fallback
|
||||
// to finding a match with ID.
|
||||
// KEYS[1] -> asynq:in_progress
|
||||
// KEYS[2] -> asynq:processed:<yyyy-mm-dd>
|
||||
// ARGV[1] -> base.TaskMessage value
|
||||
@@ -154,8 +154,8 @@ func (r *RDB) Retry(msg *base.TaskMessage, processAt time.Time, errMsg string) e
|
||||
return err
|
||||
}
|
||||
// Note: Script will try removing the message by exact match first,
|
||||
// if the task is muated and exact match is not found, it'll fallback
|
||||
// to linear scan of the list and find a match with ID.
|
||||
// if the task is mutated and exact match is not found, it'll fallback
|
||||
// to finding a match with ID.
|
||||
// KEYS[1] -> asynq:in_progress
|
||||
// KEYS[2] -> asynq:retry
|
||||
// KEYS[3] -> asynq:processed:<yyyy-mm-dd>
|
||||
@@ -222,8 +222,8 @@ func (r *RDB) Kill(msg *base.TaskMessage, errMsg string) error {
|
||||
failureKey := base.FailureKey(now)
|
||||
expireAt := now.Add(statsTTL)
|
||||
// Note: Script will try removing the message by exact match first,
|
||||
// if the task is muated and exact match is not found, it'll fallback
|
||||
// to linear scan of the list and find a match with ID.
|
||||
// if the task is mutated and exact match is not found, it'll fallback
|
||||
// to finding a match with ID.
|
||||
// KEYS[1] -> asynq:in_progress
|
||||
// KEYS[2] -> asynq:dead
|
||||
// KEYS[3] -> asynq:processed:<yyyy-mm-dd>
|
||||
|
||||
Reference in New Issue
Block a user