forked from mirror/redis
Merge pull request #409 from bpiddubnyi/bugfix/setxx-zero-ex
Fix "invalid expire time in set" for SetXX with expiration = 0
This commit is contained in:
commit
80cf5d1652
10
commands.go
10
commands.go
|
@ -788,10 +788,14 @@ func (c *cmdable) SetNX(key string, value interface{}, expiration time.Duration)
|
||||||
// Zero expiration means the key has no expiration time.
|
// Zero expiration means the key has no expiration time.
|
||||||
func (c *cmdable) SetXX(key string, value interface{}, expiration time.Duration) *BoolCmd {
|
func (c *cmdable) SetXX(key string, value interface{}, expiration time.Duration) *BoolCmd {
|
||||||
var cmd *BoolCmd
|
var cmd *BoolCmd
|
||||||
if usePrecise(expiration) {
|
if expiration == 0 {
|
||||||
cmd = NewBoolCmd("set", key, value, "px", formatMs(expiration), "xx")
|
cmd = NewBoolCmd("set", key, value, "xx")
|
||||||
} else {
|
} else {
|
||||||
cmd = NewBoolCmd("set", key, value, "ex", formatSec(expiration), "xx")
|
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)
|
c.process(cmd)
|
||||||
return cmd
|
return cmd
|
||||||
|
|
|
@ -996,6 +996,23 @@ var _ = Describe("Commands", func() {
|
||||||
})
|
})
|
||||||
|
|
||||||
It("should SetXX", func() {
|
It("should SetXX", func() {
|
||||||
|
isSet, err := client.SetXX("key", "hello2", 0).Result()
|
||||||
|
Expect(err).NotTo(HaveOccurred())
|
||||||
|
Expect(isSet).To(Equal(false))
|
||||||
|
|
||||||
|
err = client.Set("key", "hello", 0).Err()
|
||||||
|
Expect(err).NotTo(HaveOccurred())
|
||||||
|
|
||||||
|
isSet, err = client.SetXX("key", "hello2", 0).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 SetXX with expiration", func() {
|
||||||
isSet, err := client.SetXX("key", "hello2", time.Second).Result()
|
isSet, err := client.SetXX("key", "hello2", time.Second).Result()
|
||||||
Expect(err).NotTo(HaveOccurred())
|
Expect(err).NotTo(HaveOccurred())
|
||||||
Expect(isSet).To(Equal(false))
|
Expect(isSet).To(Equal(false))
|
||||||
|
|
Loading…
Reference in New Issue