1
0
mirror of https://github.com/redis/go-redis.git synced 2025-11-08 13:02:18 +03:00

feat: Add support for certain slowlog commands (#3585)

* Add support for certain slowlog commands

* add NonRedisEnterprise label for slow reset test

---------

Co-authored-by: Nedyalko Dyakov <1547186+ndyakov@users.noreply.github.com>
This commit is contained in:
destinyoooo
2025-11-06 03:21:38 +08:00
committed by GitHub
parent 63fbaafcef
commit c1766729ec
2 changed files with 43 additions and 1 deletions

View File

@@ -211,6 +211,8 @@ type Cmdable interface {
ShutdownNoSave(ctx context.Context) *StatusCmd ShutdownNoSave(ctx context.Context) *StatusCmd
SlaveOf(ctx context.Context, host, port string) *StatusCmd SlaveOf(ctx context.Context, host, port string) *StatusCmd
SlowLogGet(ctx context.Context, num int64) *SlowLogCmd SlowLogGet(ctx context.Context, num int64) *SlowLogCmd
SlowLogLen(ctx context.Context) *IntCmd
SlowLogReset(ctx context.Context) *StatusCmd
Time(ctx context.Context) *TimeCmd Time(ctx context.Context) *TimeCmd
DebugObject(ctx context.Context, key string) *StringCmd DebugObject(ctx context.Context, key string) *StringCmd
MemoryUsage(ctx context.Context, key string, samples ...int) *IntCmd MemoryUsage(ctx context.Context, key string, samples ...int) *IntCmd
@@ -675,6 +677,18 @@ func (c cmdable) SlowLogGet(ctx context.Context, num int64) *SlowLogCmd {
return cmd return cmd
} }
func (c cmdable) SlowLogLen(ctx context.Context) *IntCmd {
cmd := NewIntCmd(ctx, "slowlog", "len")
_ = c(ctx, cmd)
return cmd
}
func (c cmdable) SlowLogReset(ctx context.Context) *StatusCmd {
cmd := NewStatusCmd(ctx, "slowlog", "reset")
_ = c(ctx, cmd)
return cmd
}
func (c cmdable) Latency(ctx context.Context) *LatencyCmd { func (c cmdable) Latency(ctx context.Context) *LatencyCmd {
cmd := NewLatencyCmd(ctx, "latency", "latest") cmd := NewLatencyCmd(ctx, "latency", "latest")
_ = c(ctx, cmd) _ = c(ctx, cmd)

View File

@@ -8294,7 +8294,7 @@ var _ = Describe("Commands", func() {
}) })
}) })
Describe("SlowLogGet", func() { Describe("SlowLog", func() {
It("returns slow query result", func() { It("returns slow query result", func() {
const key = "slowlog-log-slower-than" const key = "slowlog-log-slower-than"
@@ -8311,6 +8311,34 @@ var _ = Describe("Commands", func() {
Expect(err).NotTo(HaveOccurred()) Expect(err).NotTo(HaveOccurred())
Expect(len(result)).NotTo(BeZero()) Expect(len(result)).NotTo(BeZero())
}) })
It("returns the number of slow queries", Label("NonRedisEnterprise"), func() {
// Reset slowlog
err := client.SlowLogReset(ctx).Err()
Expect(err).NotTo(HaveOccurred())
const key = "slowlog-log-slower-than"
old := client.ConfigGet(ctx, key).Val()
// first slowlog entry is the config set command itself
client.ConfigSet(ctx, key, "0")
defer client.ConfigSet(ctx, key, old[key])
// Set a key to trigger a slow query, and this is the second slowlog entry
client.Set(ctx, "test", "true", 0)
result, err := client.SlowLogLen(ctx).Result()
Expect(err).NotTo(HaveOccurred())
Expect(result).Should(Equal(int64(2)))
// Reset slowlog
err = client.SlowLogReset(ctx).Err()
Expect(err).NotTo(HaveOccurred())
// Check if slowlog is empty, this is the first slowlog entry after reset
result, err = client.SlowLogLen(ctx).Result()
Expect(err).NotTo(HaveOccurred())
Expect(result).Should(Equal(int64(1)))
})
}) })
Describe("Latency", Label("NonRedisEnterprise"), func() { Describe("Latency", Label("NonRedisEnterprise"), func() {