Rename HMSet to HSet and restore old HMSet

This commit is contained in:
Vladimir Mihailenco 2020-02-19 15:14:18 +02:00
parent 726f6807ac
commit 7df36b4eb7
3 changed files with 23 additions and 13 deletions

View File

@ -1,5 +1,9 @@
# Changelog # Changelog
## v7.2
- Existing `HMSet` is renamed to `HSet` and old deprecated `HMSet` is restored for Redis 3 users.
## v7 ## v7
- *Important*. Tx.Pipeline now returns a non-transactional pipeline. Use Tx.TxPipeline for a transactional pipeline. - *Important*. Tx.Pipeline now returns a non-transactional pipeline. Use Tx.TxPipeline for a transactional pipeline.
@ -11,6 +15,7 @@
- Add PubSub.ChannelWithSubscriptions that sends `*Subscription` in addition to `*Message` to allow detecting reconnections. - Add PubSub.ChannelWithSubscriptions that sends `*Subscription` in addition to `*Message` to allow detecting reconnections.
- `time.Time` is now marshalled in RFC3339 format. `rdb.Get("foo").Time()` helper is added to parse the time. - `time.Time` is now marshalled in RFC3339 format. `rdb.Get("foo").Time()` helper is added to parse the time.
- `SetLimiter` is removed and added `Options.Limiter` instead. - `SetLimiter` is removed and added `Options.Limiter` instead.
- `HMSet` is deprecated as of Redis v4.
## v6.15 ## v6.15

View File

@ -130,8 +130,8 @@ type Cmdable interface {
HKeys(key string) *StringSliceCmd HKeys(key string) *StringSliceCmd
HLen(key string) *IntCmd HLen(key string) *IntCmd
HMGet(key string, fields ...string) *SliceCmd HMGet(key string, fields ...string) *SliceCmd
HMSet(key string, values ...interface{}) *IntCmd HSet(key string, values ...interface{}) *IntCmd
HSet(key, field string, value interface{}) *BoolCmd HMSet(key string, values ...interface{}) *BoolCmd
HSetNX(key, field string, value interface{}) *BoolCmd HSetNX(key, field string, value interface{}) *BoolCmd
HVals(key string) *StringSliceCmd HVals(key string) *StringSliceCmd
BLPop(timeout time.Duration, keys ...string) *StringSliceCmd BLPop(timeout time.Duration, keys ...string) *StringSliceCmd
@ -983,13 +983,13 @@ func (c cmdable) HMGet(key string, fields ...string) *SliceCmd {
return cmd return cmd
} }
// HMSet is like HSet, but accepts multiple values: // HSet accepts values in following formats:
// - HMSet("myhash", "key1", "value1", "key2", "value2") // - HMSet("myhash", "key1", "value1", "key2", "value2")
// - HMSet("myhash", []string{"key1", "value1", "key2", "value2"}) // - HMSet("myhash", []string{"key1", "value1", "key2", "value2"})
// - HMSet("myhash", map[string]interface{}{"key1": "value1", "key2": "value2"}) // - HMSet("myhash", map[string]interface{}{"key1": "value1", "key2": "value2"})
// //
// Note that it uses HSET Redis command underneath because HMSET is deprecated. // Note that it requires Redis v4 for multiple field/value pairs support.
func (c cmdable) HMSet(key string, values ...interface{}) *IntCmd { func (c cmdable) HSet(key string, values ...interface{}) *IntCmd {
args := make([]interface{}, 2, 2+len(values)) args := make([]interface{}, 2, 2+len(values))
args[0] = "hset" args[0] = "hset"
args[1] = key args[1] = key
@ -999,8 +999,13 @@ func (c cmdable) HMSet(key string, values ...interface{}) *IntCmd {
return cmd return cmd
} }
func (c cmdable) HSet(key, field string, value interface{}) *BoolCmd { // HMSet is a deprecated version of HSet left for compatibility with Redis 3.
cmd := NewBoolCmd("hset", key, field, value) func (c cmdable) HMSet(key string, values ...interface{}) *BoolCmd {
args := make([]interface{}, 2, 2+len(values))
args[0] = "hmset"
args[1] = key
args = appendArgs(args, values)
cmd := NewBoolCmd(args...)
_ = c(cmd) _ = c(cmd)
return cmd return cmd
} }

View File

@ -1325,7 +1325,7 @@ var _ = Describe("Commands", func() {
It("should HIncrByFloat", func() { It("should HIncrByFloat", func() {
hSet := client.HSet("hash", "field", "10.50") hSet := client.HSet("hash", "field", "10.50")
Expect(hSet.Err()).NotTo(HaveOccurred()) Expect(hSet.Err()).NotTo(HaveOccurred())
Expect(hSet.Val()).To(Equal(true)) Expect(hSet.Val()).To(Equal(int64(1)))
hIncrByFloat := client.HIncrByFloat("hash", "field", 0.1) hIncrByFloat := client.HIncrByFloat("hash", "field", 0.1)
Expect(hIncrByFloat.Err()).NotTo(HaveOccurred()) Expect(hIncrByFloat.Err()).NotTo(HaveOccurred())
@ -1333,7 +1333,7 @@ var _ = Describe("Commands", func() {
hSet = client.HSet("hash", "field", "5.0e3") hSet = client.HSet("hash", "field", "5.0e3")
Expect(hSet.Err()).NotTo(HaveOccurred()) Expect(hSet.Err()).NotTo(HaveOccurred())
Expect(hSet.Val()).To(Equal(false)) Expect(hSet.Val()).To(Equal(int64(0)))
hIncrByFloat = client.HIncrByFloat("hash", "field", 2.0e2) hIncrByFloat = client.HIncrByFloat("hash", "field", 2.0e2)
Expect(hIncrByFloat.Err()).NotTo(HaveOccurred()) Expect(hIncrByFloat.Err()).NotTo(HaveOccurred())
@ -1367,7 +1367,7 @@ var _ = Describe("Commands", func() {
}) })
It("should HMGet", func() { It("should HMGet", func() {
err := client.HMSet("hash", "key1", "hello1", "key2", "hello2").Err() err := client.HSet("hash", "key1", "hello1", "key2", "hello2").Err()
Expect(err).NotTo(HaveOccurred()) Expect(err).NotTo(HaveOccurred())
vals, err := client.HMGet("hash", "key1", "key2", "_").Result() vals, err := client.HMGet("hash", "key1", "key2", "_").Result()
@ -1375,8 +1375,8 @@ var _ = Describe("Commands", func() {
Expect(vals).To(Equal([]interface{}{"hello1", "hello2", nil})) Expect(vals).To(Equal([]interface{}{"hello1", "hello2", nil}))
}) })
It("should HMSet", func() { It("should HSet", func() {
ok, err := client.HMSet("hash", map[string]interface{}{ ok, err := client.HSet("hash", map[string]interface{}{
"key1": "hello1", "key1": "hello1",
"key2": "hello2", "key2": "hello2",
}).Result() }).Result()
@ -1399,7 +1399,7 @@ var _ = Describe("Commands", func() {
It("should HSet", func() { It("should HSet", func() {
hSet := client.HSet("hash", "key", "hello") hSet := client.HSet("hash", "key", "hello")
Expect(hSet.Err()).NotTo(HaveOccurred()) Expect(hSet.Err()).NotTo(HaveOccurred())
Expect(hSet.Val()).To(Equal(true)) Expect(hSet.Val()).To(Equal(int64(1)))
hGet := client.HGet("hash", "key") hGet := client.HGet("hash", "key")
Expect(hGet.Err()).NotTo(HaveOccurred()) Expect(hGet.Err()).NotTo(HaveOccurred())