From 4ffcd9b7f678e0b337d61666cc943f51ccdb8f58 Mon Sep 17 00:00:00 2001 From: lhchavez Date: Wed, 3 Mar 2021 19:24:29 -0800 Subject: [PATCH] Make SetArgs available to Pipeliner SetArgs is amazing! It would be even more amazing to be able to use it within a non-transactional Pipeline. --- commands.go | 1 + commands_test.go | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/commands.go b/commands.go index 60f06842..2acbd837 100644 --- a/commands.go +++ b/commands.go @@ -124,6 +124,7 @@ type Cmdable interface { MSet(ctx context.Context, values ...interface{}) *StatusCmd MSetNX(ctx context.Context, values ...interface{}) *BoolCmd Set(ctx context.Context, key string, value interface{}, expiration time.Duration) *StatusCmd + SetArgs(ctx context.Context, key string, value interface{}, a SetArgs) *StatusCmd SetEX(ctx context.Context, key string, value interface{}, expiration time.Duration) *StatusCmd SetNX(ctx context.Context, key string, value interface{}, expiration time.Duration) *BoolCmd SetXX(ctx context.Context, key string, value interface{}, expiration time.Duration) *BoolCmd diff --git a/commands_test.go b/commands_test.go index e80e7033..b39bc407 100644 --- a/commands_test.go +++ b/commands_test.go @@ -1400,6 +1400,23 @@ var _ = Describe("Commands", func() { Expect(val).To(Equal("hello")) }) + It("should Pipelined SetArgs with Get and key exists", func() { + e := client.Set(ctx, "key", "hello", 0) + Expect(e.Err()).NotTo(HaveOccurred()) + + args := redis.SetArgs{ + Get: true, + } + + pipe := client.Pipeline() + setArgs := pipe.SetArgs(ctx, "key", "world", args) + _, err := pipe.Exec(ctx) + Expect(err).NotTo(HaveOccurred()) + + Expect(setArgs.Err()).NotTo(HaveOccurred()) + Expect(setArgs.Val()).To(Equal("hello")) + }) + It("should Set with expiration", func() { err := client.Set(ctx, "key", "hello", 100*time.Millisecond).Err() Expect(err).NotTo(HaveOccurred())