diff --git a/cluster_test.go b/cluster_test.go index 803338c..ce583ad 100644 --- a/cluster_test.go +++ b/cluster_test.go @@ -167,7 +167,7 @@ var _ = Describe("Cluster", func() { Expect(err).To(Equal(redis.Nil)) Expect(val).To(Equal("")) - val, err = client.Set("A", "VALUE").Result() + val, err = client.Set("A", "VALUE", 0).Result() Expect(err).NotTo(HaveOccurred()) Expect(val).To(Equal("OK")) @@ -181,7 +181,7 @@ var _ = Describe("Cluster", func() { }) It("should follow redirects", func() { - Expect(client.Set("A", "VALUE").Err()).NotTo(HaveOccurred()) + Expect(client.Set("A", "VALUE", 0).Err()).NotTo(HaveOccurred()) Expect(redis.HashSlot("A")).To(Equal(6373)) // Slot 6373 is stored on the second node diff --git a/command.go b/command.go index a4bfcf8..977a313 100644 --- a/command.go +++ b/command.go @@ -338,12 +338,25 @@ func (cmd *BoolCmd) String() string { func (cmd *BoolCmd) parseReply(rd *bufio.Reader) error { v, err := parseReply(rd, nil) + // `SET key value NX` returns nil when key already exists. + if err == Nil { + cmd.val = false + return nil + } if err != nil { cmd.err = err return err } - cmd.val = v.(int64) == 1 - return nil + switch vv := v.(type) { + case int64: + cmd.val = vv == 1 + return nil + case string: + cmd.val = vv == "OK" + return nil + default: + return fmt.Errorf("got %T, wanted int64 or string") + } } //------------------------------------------------------------------------------ diff --git a/command_test.go b/command_test.go index c58528f..a02847e 100644 --- a/command_test.go +++ b/command_test.go @@ -26,7 +26,7 @@ var _ = Describe("Command", func() { }) It("should have a plain string result", func() { - set := client.Set("foo", "bar") + set := client.Set("foo", "bar", 0) Expect(set.String()).To(Equal("SET foo bar: OK")) get := client.Get("foo") @@ -34,7 +34,7 @@ var _ = Describe("Command", func() { }) It("should have correct val/err states", func() { - set := client.Set("key", "hello") + set := client.Set("key", "hello", 0) Expect(set.Err()).NotTo(HaveOccurred()) Expect(set.Val()).To(Equal("OK")) @@ -47,7 +47,7 @@ var _ = Describe("Command", func() { }) It("should escape special chars", func() { - set := client.Set("key", "hello1\r\nhello2\r\n") + set := client.Set("key", "hello1\r\nhello2\r\n", 0) Expect(set.Err()).NotTo(HaveOccurred()) Expect(set.Val()).To(Equal("OK")) @@ -58,7 +58,7 @@ var _ = Describe("Command", func() { It("should handle big vals", func() { val := string(bytes.Repeat([]byte{'*'}, 1<<16)) - set := client.Set("key", val) + set := client.Set("key", val, 0) Expect(set.Err()).NotTo(HaveOccurred()) Expect(set.Val()).To(Equal("OK")) @@ -70,7 +70,7 @@ var _ = Describe("Command", func() { It("should handle many keys #1", func() { const n = 100000 for i := 0; i < n; i++ { - client.Set("keys.key"+strconv.Itoa(i), "hello"+strconv.Itoa(i)) + client.Set("keys.key"+strconv.Itoa(i), "hello"+strconv.Itoa(i), 0) } keys := client.Keys("keys.*") Expect(keys.Err()).NotTo(HaveOccurred()) @@ -83,7 +83,7 @@ var _ = Describe("Command", func() { keys := []string{"non-existent-key"} for i := 0; i < n; i++ { key := "keys.key" + strconv.Itoa(i) - client.Set(key, "hello"+strconv.Itoa(i)) + client.Set(key, "hello"+strconv.Itoa(i), 0) keys = append(keys, key) } keys = append(keys, "non-existent-key") @@ -100,7 +100,7 @@ var _ = Describe("Command", func() { }) It("should convert strings via helpers", func() { - set := client.Set("key", "10") + set := client.Set("key", "10", 0) Expect(set.Err()).NotTo(HaveOccurred()) n, err := client.Get("key").Int64() diff --git a/commands.go b/commands.go index f2a22e9..5154b79 100644 --- a/commands.go +++ b/commands.go @@ -25,6 +25,18 @@ func (c *commandable) Process(cmd Cmder) { c.process(cmd) } +func usePrecise(dur time.Duration) bool { + return dur < time.Second || dur%time.Second != 0 +} + +func formatMs(dur time.Duration) string { + return strconv.FormatInt(int64(dur/time.Millisecond), 10) +} + +func formatSec(dur time.Duration) string { + return strconv.FormatInt(int64(dur/time.Second), 10) +} + //------------------------------------------------------------------------------ func (c *commandable) Auth(password string) *StatusCmd { @@ -77,8 +89,8 @@ func (c *commandable) Exists(key string) *BoolCmd { return cmd } -func (c *commandable) Expire(key string, dur time.Duration) *BoolCmd { - cmd := NewBoolCmd("EXPIRE", key, strconv.FormatInt(int64(dur/time.Second), 10)) +func (c *commandable) Expire(key string, expiration time.Duration) *BoolCmd { + cmd := NewBoolCmd("EXPIRE", key, formatSec(expiration)) c.Process(cmd) return cmd } @@ -146,8 +158,8 @@ func (c *commandable) Persist(key string) *BoolCmd { return cmd } -func (c *commandable) PExpire(key string, dur time.Duration) *BoolCmd { - cmd := NewBoolCmd("PEXPIRE", key, strconv.FormatInt(int64(dur/time.Millisecond), 10)) +func (c *commandable) PExpire(key string, expiration time.Duration) *BoolCmd { + cmd := NewBoolCmd("PEXPIRE", key, formatMs(expiration)) c.Process(cmd) return cmd } @@ -425,19 +437,22 @@ func (c *commandable) MSetNX(pairs ...string) *BoolCmd { return cmd } -func (c *commandable) PSetEx(key string, dur time.Duration, value string) *StatusCmd { - cmd := NewStatusCmd( - "PSETEX", - key, - strconv.FormatInt(int64(dur/time.Millisecond), 10), - value, - ) +func (c *commandable) PSetEx(key string, expiration time.Duration, value string) *StatusCmd { + cmd := NewStatusCmd("PSETEX", key, formatMs(expiration), value) c.Process(cmd) return cmd } -func (c *commandable) Set(key, value string) *StatusCmd { - cmd := NewStatusCmd("SET", key, value) +func (c *commandable) Set(key, value string, expiration time.Duration) *StatusCmd { + args := []string{"SET", key, value} + if expiration > 0 { + if usePrecise(expiration) { + args = append(args, "PX", formatMs(expiration)) + } else { + args = append(args, "EX", formatSec(expiration)) + } + } + cmd := NewStatusCmd(args...) c.Process(cmd) return cmd } @@ -453,14 +468,35 @@ func (c *commandable) SetBit(key string, offset int64, value int) *IntCmd { return cmd } -func (c *commandable) SetEx(key string, dur time.Duration, value string) *StatusCmd { - cmd := NewStatusCmd("SETEX", key, strconv.FormatInt(int64(dur/time.Second), 10), value) +func (c *commandable) SetEx(key string, expiration time.Duration, value string) *StatusCmd { + cmd := NewStatusCmd("SETEX", key, formatSec(expiration), value) c.Process(cmd) return cmd } -func (c *commandable) SetNX(key, value string) *BoolCmd { - cmd := NewBoolCmd("SETNX", key, value) +func (c *commandable) SetNX(key, value string, expiration time.Duration) *BoolCmd { + var cmd *BoolCmd + if expiration == 0 { + // Use old `SETNX` to support old Redis versions. + cmd = NewBoolCmd("SETNX", key, value) + } else { + if usePrecise(expiration) { + cmd = NewBoolCmd("SET", key, value, "PX", formatMs(expiration), "NX") + } else { + cmd = NewBoolCmd("SET", key, value, "EX", formatSec(expiration), "NX") + } + } + c.Process(cmd) + return cmd +} + +func (c *Client) SetXX(key, value string, expiration time.Duration) *BoolCmd { + var cmd *BoolCmd + if usePrecise(expiration) { + cmd = NewBoolCmd("SET", key, value, "PX", formatMs(expiration), "XX") + } else { + cmd = NewBoolCmd("SET", key, value, "EX", formatSec(expiration), "XX") + } c.Process(cmd) return cmd } diff --git a/commands_test.go b/commands_test.go index dad515a..6cae06d 100644 --- a/commands_test.go +++ b/commands_test.go @@ -149,7 +149,7 @@ var _ = Describe("Commands", func() { Expect(debug.Err()).To(HaveOccurred()) Expect(debug.Err().Error()).To(Equal("ERR no such key")) - client.Set("foo", "bar") + client.Set("foo", "bar", 0) debug = client.DebugObject("foo") Expect(debug.Err()).NotTo(HaveOccurred()) Expect(debug.Val()).To(ContainSubstring(`serializedlength:4`)) @@ -162,10 +162,10 @@ var _ = Describe("Commands", func() { Describe("keys", func() { It("should Del", func() { - set := client.Set("key1", "Hello") + set := client.Set("key1", "Hello", 0) Expect(set.Err()).NotTo(HaveOccurred()) Expect(set.Val()).To(Equal("OK")) - set = client.Set("key2", "World") + set = client.Set("key2", "World", 0) Expect(set.Err()).NotTo(HaveOccurred()) Expect(set.Val()).To(Equal("OK")) @@ -175,7 +175,7 @@ var _ = Describe("Commands", func() { }) It("should Dump", func() { - set := client.Set("key", "hello") + set := client.Set("key", "hello", 0) Expect(set.Err()).NotTo(HaveOccurred()) Expect(set.Val()).To(Equal("OK")) @@ -185,7 +185,7 @@ var _ = Describe("Commands", func() { }) It("should Exists", func() { - set := client.Set("key1", "Hello") + set := client.Set("key1", "Hello", 0) Expect(set.Err()).NotTo(HaveOccurred()) Expect(set.Val()).To(Equal("OK")) @@ -199,7 +199,7 @@ var _ = Describe("Commands", func() { }) It("should Expire", func() { - set := client.Set("key", "Hello") + set := client.Set("key", "Hello", 0) Expect(set.Err()).NotTo(HaveOccurred()) Expect(set.Val()).To(Equal("OK")) @@ -211,7 +211,7 @@ var _ = Describe("Commands", func() { Expect(ttl.Err()).NotTo(HaveOccurred()) Expect(ttl.Val()).To(Equal(10 * time.Second)) - set = client.Set("key", "Hello World") + set = client.Set("key", "Hello World", 0) Expect(set.Err()).NotTo(HaveOccurred()) Expect(set.Val()).To(Equal("OK")) @@ -221,7 +221,7 @@ var _ = Describe("Commands", func() { }) It("should ExpireAt", func() { - set := client.Set("key", "Hello") + set := client.Set("key", "Hello", 0) Expect(set.Err()).NotTo(HaveOccurred()) Expect(set.Val()).To(Equal("OK")) @@ -261,7 +261,7 @@ var _ = Describe("Commands", func() { Expect(migrate.Err()).NotTo(HaveOccurred()) Expect(migrate.Val()).To(Equal("NOKEY")) - set := client.Set("key", "hello") + set := client.Set("key", "hello", 0) Expect(set.Err()).NotTo(HaveOccurred()) Expect(set.Val()).To(Equal("OK")) @@ -275,7 +275,7 @@ var _ = Describe("Commands", func() { Expect(move.Err()).NotTo(HaveOccurred()) Expect(move.Val()).To(Equal(false)) - set := client.Set("key", "hello") + set := client.Set("key", "hello", 0) Expect(set.Err()).NotTo(HaveOccurred()) Expect(set.Val()).To(Equal("OK")) @@ -299,7 +299,7 @@ var _ = Describe("Commands", func() { }) It("should Object", func() { - set := client.Set("key", "hello") + set := client.Set("key", "hello", 0) Expect(set.Err()).NotTo(HaveOccurred()) Expect(set.Val()).To(Equal("OK")) @@ -317,7 +317,7 @@ var _ = Describe("Commands", func() { }) It("should Persist", func() { - set := client.Set("key", "Hello") + set := client.Set("key", "Hello", 0) Expect(set.Err()).NotTo(HaveOccurred()) Expect(set.Val()).To(Equal("OK")) @@ -339,7 +339,7 @@ var _ = Describe("Commands", func() { }) It("should PExpire", func() { - set := client.Set("key", "Hello") + set := client.Set("key", "Hello", 0) Expect(set.Err()).NotTo(HaveOccurred()) Expect(set.Val()).To(Equal("OK")) @@ -359,7 +359,7 @@ var _ = Describe("Commands", func() { }) It("should PExpireAt", func() { - set := client.Set("key", "Hello") + set := client.Set("key", "Hello", 0) Expect(set.Err()).NotTo(HaveOccurred()) Expect(set.Val()).To(Equal("OK")) @@ -379,7 +379,7 @@ var _ = Describe("Commands", func() { }) It("should PTTL", func() { - set := client.Set("key", "Hello") + set := client.Set("key", "Hello", 0) Expect(set.Err()).NotTo(HaveOccurred()) Expect(set.Val()).To(Equal("OK")) @@ -399,7 +399,7 @@ var _ = Describe("Commands", func() { Expect(randomKey.Err()).To(Equal(redis.Nil)) Expect(randomKey.Val()).To(Equal("")) - set := client.Set("key", "hello") + set := client.Set("key", "hello", 0) Expect(set.Err()).NotTo(HaveOccurred()) Expect(set.Val()).To(Equal("OK")) @@ -409,7 +409,7 @@ var _ = Describe("Commands", func() { }) It("should Rename", func() { - set := client.Set("key", "hello") + set := client.Set("key", "hello", 0) Expect(set.Err()).NotTo(HaveOccurred()) Expect(set.Val()).To(Equal("OK")) @@ -423,7 +423,7 @@ var _ = Describe("Commands", func() { }) It("should RenameNX", func() { - set := client.Set("key", "hello") + set := client.Set("key", "hello", 0) Expect(set.Err()).NotTo(HaveOccurred()) Expect(set.Val()).To(Equal("OK")) @@ -437,7 +437,7 @@ var _ = Describe("Commands", func() { }) It("should Restore", func() { - set := client.Set("key", "hello") + set := client.Set("key", "hello", 0) Expect(set.Err()).NotTo(HaveOccurred()) Expect(set.Val()).To(Equal("OK")) @@ -481,7 +481,7 @@ var _ = Describe("Commands", func() { Expect(ttl.Err()).NotTo(HaveOccurred()) Expect(ttl.Val() < 0).To(Equal(true)) - set := client.Set("key", "hello") + set := client.Set("key", "hello", 0) Expect(set.Err()).NotTo(HaveOccurred()) Expect(set.Val()).To(Equal("OK")) @@ -495,7 +495,7 @@ var _ = Describe("Commands", func() { }) It("should Type", func() { - set := client.Set("key", "hello") + set := client.Set("key", "hello", 0) Expect(set.Err()).NotTo(HaveOccurred()) Expect(set.Val()).To(Equal("OK")) @@ -512,7 +512,7 @@ var _ = Describe("Commands", func() { It("should Scan", func() { for i := 0; i < 1000; i++ { - set := client.Set(fmt.Sprintf("key%d", i), "hello") + set := client.Set(fmt.Sprintf("key%d", i), "hello", 0) Expect(set.Err()).NotTo(HaveOccurred()) } @@ -583,7 +583,7 @@ var _ = Describe("Commands", func() { }) It("should BitCount", func() { - set := client.Set("key", "foobar") + set := client.Set("key", "foobar", 0) Expect(set.Err()).NotTo(HaveOccurred()) Expect(set.Val()).To(Equal("OK")) @@ -601,11 +601,11 @@ var _ = Describe("Commands", func() { }) It("should BitOpAnd", func() { - set := client.Set("key1", "1") + set := client.Set("key1", "1", 0) Expect(set.Err()).NotTo(HaveOccurred()) Expect(set.Val()).To(Equal("OK")) - set = client.Set("key2", "0") + set = client.Set("key2", "0", 0) Expect(set.Err()).NotTo(HaveOccurred()) Expect(set.Val()).To(Equal("OK")) @@ -619,11 +619,11 @@ var _ = Describe("Commands", func() { }) It("should BitOpOr", func() { - set := client.Set("key1", "1") + set := client.Set("key1", "1", 0) Expect(set.Err()).NotTo(HaveOccurred()) Expect(set.Val()).To(Equal("OK")) - set = client.Set("key2", "0") + set = client.Set("key2", "0", 0) Expect(set.Err()).NotTo(HaveOccurred()) Expect(set.Val()).To(Equal("OK")) @@ -637,11 +637,11 @@ var _ = Describe("Commands", func() { }) It("should BitOpXor", func() { - set := client.Set("key1", "\xff") + set := client.Set("key1", "\xff", 0) Expect(set.Err()).NotTo(HaveOccurred()) Expect(set.Val()).To(Equal("OK")) - set = client.Set("key2", "\x0f") + set = client.Set("key2", "\x0f", 0) Expect(set.Err()).NotTo(HaveOccurred()) Expect(set.Val()).To(Equal("OK")) @@ -655,7 +655,7 @@ var _ = Describe("Commands", func() { }) It("should BitOpNot", func() { - set := client.Set("key1", "\x00") + set := client.Set("key1", "\x00", 0) Expect(set.Err()).NotTo(HaveOccurred()) Expect(set.Val()).To(Equal("OK")) @@ -669,7 +669,7 @@ var _ = Describe("Commands", func() { }) It("should Decr", func() { - set := client.Set("key", "10") + set := client.Set("key", "10", 0) Expect(set.Err()).NotTo(HaveOccurred()) Expect(set.Val()).To(Equal("OK")) @@ -677,7 +677,7 @@ var _ = Describe("Commands", func() { Expect(decr.Err()).NotTo(HaveOccurred()) Expect(decr.Val()).To(Equal(int64(9))) - set = client.Set("key", "234293482390480948029348230948") + set = client.Set("key", "234293482390480948029348230948", 0) Expect(set.Err()).NotTo(HaveOccurred()) Expect(set.Val()).To(Equal("OK")) @@ -687,7 +687,7 @@ var _ = Describe("Commands", func() { }) It("should DecrBy", func() { - set := client.Set("key", "10") + set := client.Set("key", "10", 0) Expect(set.Err()).NotTo(HaveOccurred()) Expect(set.Val()).To(Equal("OK")) @@ -701,7 +701,7 @@ var _ = Describe("Commands", func() { Expect(get.Err()).To(Equal(redis.Nil)) Expect(get.Val()).To(Equal("")) - set := client.Set("key", "hello") + set := client.Set("key", "hello", 0) Expect(set.Err()).NotTo(HaveOccurred()) Expect(set.Val()).To(Equal("OK")) @@ -729,7 +729,7 @@ var _ = Describe("Commands", func() { }) It("should GetRange", func() { - set := client.Set("key", "This is a string") + set := client.Set("key", "This is a string", 0) Expect(set.Err()).NotTo(HaveOccurred()) Expect(set.Val()).To(Equal("OK")) @@ -765,7 +765,7 @@ var _ = Describe("Commands", func() { }) It("should Incr", func() { - set := client.Set("key", "10") + set := client.Set("key", "10", 0) Expect(set.Err()).NotTo(HaveOccurred()) Expect(set.Val()).To(Equal("OK")) @@ -779,7 +779,7 @@ var _ = Describe("Commands", func() { }) It("should IncrBy", func() { - set := client.Set("key", "10") + set := client.Set("key", "10", 0) Expect(set.Err()).NotTo(HaveOccurred()) Expect(set.Val()).To(Equal("OK")) @@ -789,7 +789,7 @@ var _ = Describe("Commands", func() { }) It("should IncrByFloat", func() { - set := client.Set("key", "10.50") + set := client.Set("key", "10.50", 0) Expect(set.Err()).NotTo(HaveOccurred()) Expect(set.Val()).To(Equal("OK")) @@ -797,7 +797,7 @@ var _ = Describe("Commands", func() { Expect(incrByFloat.Err()).NotTo(HaveOccurred()) Expect(incrByFloat.Val()).To(Equal(10.6)) - set = client.Set("key", "5.0e3") + set = client.Set("key", "5.0e3", 0) Expect(set.Err()).NotTo(HaveOccurred()) Expect(set.Val()).To(Equal("OK")) @@ -848,8 +848,21 @@ var _ = Describe("Commands", func() { Expect(get.Val()).To(Equal("hello")) }) + It("should Set with expiration", func() { + err := client.Set("key", "hello", 100*time.Millisecond).Err() + Expect(err).NotTo(HaveOccurred()) + + val, err := client.Get("key").Result() + Expect(err).NotTo(HaveOccurred()) + Expect(val).To(Equal("hello")) + + Eventually(func() error { + return client.Get("foo").Err() + }, "1s", "100ms").Should(Equal(redis.Nil)) + }) + It("should SetGet", func() { - set := client.Set("key", "hello") + set := client.Set("key", "hello", 0) Expect(set.Err()).NotTo(HaveOccurred()) Expect(set.Val()).To(Equal("OK")) @@ -869,11 +882,11 @@ var _ = Describe("Commands", func() { }) It("should SetNX", func() { - setNX := client.SetNX("key", "hello") + setNX := client.SetNX("key", "hello", 0) Expect(setNX.Err()).NotTo(HaveOccurred()) Expect(setNX.Val()).To(Equal(true)) - setNX = client.SetNX("key", "hello2") + setNX = client.SetNX("key", "hello2", 0) Expect(setNX.Err()).NotTo(HaveOccurred()) Expect(setNX.Val()).To(Equal(false)) @@ -882,8 +895,39 @@ var _ = Describe("Commands", func() { Expect(get.Val()).To(Equal("hello")) }) + It("should SetNX with expiration", func() { + isSet, err := client.SetNX("key", "hello", time.Second).Result() + Expect(err).NotTo(HaveOccurred()) + Expect(isSet).To(Equal(true)) + + isSet, err = client.SetNX("key", "hello2", time.Second).Result() + Expect(err).NotTo(HaveOccurred()) + Expect(isSet).To(Equal(false)) + + val, err := client.Get("key").Result() + Expect(err).NotTo(HaveOccurred()) + Expect(val).To(Equal("hello")) + }) + + It("should SetXX", func() { + isSet, err := client.SetXX("key", "hello2", time.Second).Result() + Expect(err).NotTo(HaveOccurred()) + Expect(isSet).To(Equal(false)) + + err = client.Set("key", "hello", time.Second).Err() + Expect(err).NotTo(HaveOccurred()) + + isSet, err = client.SetXX("key", "hello2", time.Second).Result() + Expect(err).NotTo(HaveOccurred()) + Expect(isSet).To(Equal(true)) + + val, err := client.Get("key").Result() + Expect(err).NotTo(HaveOccurred()) + Expect(val).To(Equal("hello2")) + }) + It("should SetRange", func() { - set := client.Set("key", "Hello World") + set := client.Set("key", "Hello World", 0) Expect(set.Err()).NotTo(HaveOccurred()) Expect(set.Val()).To(Equal("OK")) @@ -897,7 +941,7 @@ var _ = Describe("Commands", func() { }) It("should StrLen", func() { - set := client.Set("key", "hello") + set := client.Set("key", "hello", 0) Expect(set.Err()).NotTo(HaveOccurred()) Expect(set.Val()).To(Equal("OK")) @@ -2176,7 +2220,7 @@ var _ = Describe("Commands", func() { Expect(err).NotTo(HaveOccurred()) return multi.Exec(func() error { - multi.Set("key", strconv.FormatInt(v+1, 10)) + multi.Set("key", strconv.FormatInt(v+1, 10), 0) return nil }) } @@ -2187,7 +2231,7 @@ var _ = Describe("Commands", func() { n = 1000 } - err := client.Set("key", "0").Err() + err := client.Set("key", "0", 0).Err() Expect(err).NotTo(HaveOccurred()) wg := &sync.WaitGroup{} diff --git a/example_test.go b/example_test.go index ddcc1bf..bf94040 100644 --- a/example_test.go +++ b/example_test.go @@ -36,7 +36,7 @@ func ExampleNewFailoverClient() { } func ExampleClient() { - if err := client.Set("foo", "bar").Err(); err != nil { + if err := client.Set("foo", "bar", 0).Err(); err != nil { panic(err) } @@ -57,7 +57,7 @@ func ExampleClient_Incr() { func ExampleClient_Pipelined() { cmds, err := client.Pipelined(func(c *redis.Pipeline) error { - c.Set("key1", "hello1") + c.Set("key1", "hello1", 0) c.Get("key1") return nil }) @@ -73,7 +73,7 @@ func ExampleClient_Pipelined() { func ExamplePipeline() { pipeline := client.Pipeline() - set := pipeline.Set("key1", "hello1") + set := pipeline.Set("key1", "hello1", 0) get := pipeline.Get("key1") cmds, err := pipeline.Exec() fmt.Println(cmds, err) @@ -93,7 +93,7 @@ func ExampleMulti() { n, _ := strconv.ParseInt(s, 10, 64) return tx.Exec(func() error { - tx.Set("key", strconv.FormatInt(n+1, 10)) + tx.Set("key", strconv.FormatInt(n+1, 10), 0) return nil }) } diff --git a/multi_test.go b/multi_test.go index 801bb19..eab870c 100644 --- a/multi_test.go +++ b/multi_test.go @@ -32,7 +32,7 @@ var _ = Describe("Multi", func() { get *redis.StringCmd ) cmds, err := multi.Exec(func() error { - set = multi.Set("key", "hello") + set = multi.Set("key", "hello", 0) get = multi.Get("key") return nil }) @@ -53,9 +53,9 @@ var _ = Describe("Multi", func() { }() cmds, err := multi.Exec(func() error { - multi.Set("key1", "hello1") + multi.Set("key1", "hello1", 0) multi.Discard() - multi.Set("key2", "hello2") + multi.Set("key2", "hello2", 0) return nil }) Expect(err).NotTo(HaveOccurred()) diff --git a/pipeline_test.go b/pipeline_test.go index c55f99d..9d2770d 100644 --- a/pipeline_test.go +++ b/pipeline_test.go @@ -25,12 +25,12 @@ var _ = Describe("Pipelining", func() { }) It("should pipeline", func() { - set := client.Set("key2", "hello2") + set := client.Set("key2", "hello2", 0) Expect(set.Err()).NotTo(HaveOccurred()) Expect(set.Val()).To(Equal("OK")) pipeline := client.Pipeline() - set = pipeline.Set("key1", "hello1") + set = pipeline.Set("key1", "hello1", 0) get := pipeline.Get("key2") incr := pipeline.Incr("key3") getNil := pipeline.Get("key4") diff --git a/redis_test.go b/redis_test.go index fc1f0b3..ed53b9a 100644 --- a/redis_test.go +++ b/redis_test.go @@ -109,7 +109,7 @@ var _ = Describe("Client", func() { defer db1.Close() Expect(db1.Get("key").Err()).To(Equal(redis.Nil)) - Expect(db1.Set("key", "value").Err()).NotTo(HaveOccurred()) + Expect(db1.Set("key", "value", 0).Err()).NotTo(HaveOccurred()) Expect(client.Get("key").Err()).To(Equal(redis.Nil)) Expect(db1.Get("key").Val()).To(Equal("value")) @@ -253,7 +253,7 @@ func BenchmarkRedisSet(b *testing.B) { b.StartTimer() for i := 0; i < b.N; i++ { - if err := client.Set("key", "hello").Err(); err != nil { + if err := client.Set("key", "hello", 0).Err(); err != nil { panic(err) } } @@ -281,7 +281,7 @@ func BenchmarkRedisGet(b *testing.B) { client := redis.NewTCPClient(&redis.Options{ Addr: redisAddr, }) - if err := client.Set("key", "hello").Err(); err != nil { + if err := client.Set("key", "hello", 0).Err(); err != nil { b.Fatal(err) } b.StartTimer() @@ -318,7 +318,7 @@ func BenchmarkSetExpire(b *testing.B) { b.StartTimer() for i := 0; i < b.N; i++ { - if err := client.Set("key", "hello").Err(); err != nil { + if err := client.Set("key", "hello", 0).Err(); err != nil { b.Fatal(err) } if err := client.Expire("key", time.Second).Err(); err != nil { @@ -336,7 +336,7 @@ func BenchmarkPipeline(b *testing.B) { for i := 0; i < b.N; i++ { _, err := client.Pipelined(func(pipe *redis.Pipeline) error { - pipe.Set("key", "hello") + pipe.Set("key", "hello", 0) pipe.Expire("key", time.Second) return nil }) diff --git a/sentinel_test.go b/sentinel_test.go index 8e6bf86..6fc2f4f 100644 --- a/sentinel_test.go +++ b/sentinel_test.go @@ -36,7 +36,7 @@ var _ = Describe("Sentinel", func() { defer client.Close() // Set value on master, verify - err = client.Set("foo", "master").Err() + err = client.Set("foo", "master", 0).Err() Expect(err).NotTo(HaveOccurred()) val, err := master.Get("foo").Result()