mirror of
https://github.com/redis/go-redis.git
synced 2025-04-17 20:17:02 +03:00
Add HGETDEL, HGETEX, HSETEX commands
This commit is contained in:
parent
8269e6a22a
commit
ef62dd4247
113
hash_commands.go
113
hash_commands.go
@ -10,6 +10,9 @@ type HashCmdable interface {
|
|||||||
HExists(ctx context.Context, key, field string) *BoolCmd
|
HExists(ctx context.Context, key, field string) *BoolCmd
|
||||||
HGet(ctx context.Context, key, field string) *StringCmd
|
HGet(ctx context.Context, key, field string) *StringCmd
|
||||||
HGetAll(ctx context.Context, key string) *MapStringStringCmd
|
HGetAll(ctx context.Context, key string) *MapStringStringCmd
|
||||||
|
HGetDel(ctx context.Context, key string, fields ...string) *IntSliceCmd
|
||||||
|
HGetEX(ctx context.Context, key string, fields ...string) *IntSliceCmd
|
||||||
|
HGetEXWithArgs(ctx context.Context, key string, expirationType HGetEXExpirationType, expirationVal int64, fields ...string) *IntSliceCmd
|
||||||
HIncrBy(ctx context.Context, key, field string, incr int64) *IntCmd
|
HIncrBy(ctx context.Context, key, field string, incr int64) *IntCmd
|
||||||
HIncrByFloat(ctx context.Context, key, field string, incr float64) *FloatCmd
|
HIncrByFloat(ctx context.Context, key, field string, incr float64) *FloatCmd
|
||||||
HKeys(ctx context.Context, key string) *StringSliceCmd
|
HKeys(ctx context.Context, key string) *StringSliceCmd
|
||||||
@ -17,6 +20,8 @@ type HashCmdable interface {
|
|||||||
HMGet(ctx context.Context, key string, fields ...string) *SliceCmd
|
HMGet(ctx context.Context, key string, fields ...string) *SliceCmd
|
||||||
HSet(ctx context.Context, key string, values ...interface{}) *IntCmd
|
HSet(ctx context.Context, key string, values ...interface{}) *IntCmd
|
||||||
HMSet(ctx context.Context, key string, values ...interface{}) *BoolCmd
|
HMSet(ctx context.Context, key string, values ...interface{}) *BoolCmd
|
||||||
|
HSetEX(ctx context.Context, key string, fieldsAndValues ...string) *IntCmd
|
||||||
|
HSetEXWithArgs(ctx context.Context, key string, options HSetXOptions, fieldsAndValues ...string) *IntCmd
|
||||||
HSetNX(ctx context.Context, key, field string, value interface{}) *BoolCmd
|
HSetNX(ctx context.Context, key, field string, value interface{}) *BoolCmd
|
||||||
HScan(ctx context.Context, key string, cursor uint64, match string, count int64) *ScanCmd
|
HScan(ctx context.Context, key string, cursor uint64, match string, count int64) *ScanCmd
|
||||||
HScanNoValues(ctx context.Context, key string, cursor uint64, match string, count int64) *ScanCmd
|
HScanNoValues(ctx context.Context, key string, cursor uint64, match string, count int64) *ScanCmd
|
||||||
@ -454,3 +459,111 @@ func (c cmdable) HPTTL(ctx context.Context, key string, fields ...string) *IntSl
|
|||||||
_ = c(ctx, cmd)
|
_ = c(ctx, cmd)
|
||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO check return type
|
||||||
|
func (c cmdable) HGetDel(ctx context.Context, key string, fields ...string) *IntSliceCmd {
|
||||||
|
args := []interface{}{"HGETDEL", key, "FIELDS", len(fields)}
|
||||||
|
for _, field := range fields {
|
||||||
|
args = append(args, field)
|
||||||
|
}
|
||||||
|
cmd := NewIntSliceCmd(ctx, args...)
|
||||||
|
_ = c(ctx, cmd)
|
||||||
|
return cmd
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c cmdable) HGetEX(ctx context.Context, key string, fields ...string) *IntSliceCmd {
|
||||||
|
args := []interface{}{"HGETEX", key, "FIELDS", len(fields)}
|
||||||
|
for _, field := range fields {
|
||||||
|
args = append(args, field)
|
||||||
|
}
|
||||||
|
cmd := NewIntSliceCmd(ctx, args...)
|
||||||
|
_ = c(ctx, cmd)
|
||||||
|
return cmd
|
||||||
|
}
|
||||||
|
|
||||||
|
// ExpirationType represents an expiration option for the hash commands.
|
||||||
|
type HGetEXExpirationType string
|
||||||
|
|
||||||
|
const (
|
||||||
|
HGetEXExpirationEX HGetEXExpirationType = "EX"
|
||||||
|
HGetEXExpirationPX HGetEXExpirationType = "PX"
|
||||||
|
HGetEXExpirationEXAT HGetEXExpirationType = "EXAT"
|
||||||
|
HGetEXExpirationPXAT HGetEXExpirationType = "PXAT"
|
||||||
|
HGetEXExpirationPERSIST HGetEXExpirationType = "PERSIST"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (c cmdable) HGetEXWithArgs(ctx context.Context, key string, expirationType HGetEXExpirationType, expirationVal int64, fields ...string) *IntSliceCmd {
|
||||||
|
args := []interface{}{"HGETEX", key}
|
||||||
|
|
||||||
|
// Append expiration option and its value if necessary.
|
||||||
|
args = append(args, string(expirationType))
|
||||||
|
if expirationType != HGetEXExpirationPERSIST {
|
||||||
|
args = append(args, expirationVal)
|
||||||
|
}
|
||||||
|
|
||||||
|
args = append(args, "FIELDS", len(fields))
|
||||||
|
for _, field := range fields {
|
||||||
|
args = append(args, field)
|
||||||
|
}
|
||||||
|
|
||||||
|
cmd := NewIntSliceCmd(ctx, args...)
|
||||||
|
_ = c(ctx, cmd)
|
||||||
|
return cmd
|
||||||
|
}
|
||||||
|
|
||||||
|
type HSetEXCondition string
|
||||||
|
|
||||||
|
const (
|
||||||
|
HSetEXFNX HSetEXCondition = "FNX" // Only set the fields if none of them already exist.
|
||||||
|
HSetEXFXX HSetEXCondition = "FXX" // Only set the fields if all already exist.
|
||||||
|
)
|
||||||
|
|
||||||
|
type HSetEXExpirationType string
|
||||||
|
|
||||||
|
const (
|
||||||
|
HSetEXExpirationEX HSetEXExpirationType = "EX"
|
||||||
|
HSetEXExpirationPX HSetEXExpirationType = "PX"
|
||||||
|
HSetEXExpirationEXAT HSetEXExpirationType = "EXAT"
|
||||||
|
HSetEXExpirationPXAT HSetEXExpirationType = "PXAT"
|
||||||
|
HSetEXExpirationKEEPTTL HSetEXExpirationType = "KEEPTTL"
|
||||||
|
)
|
||||||
|
|
||||||
|
type HSetXOptions struct {
|
||||||
|
Condition HSetEXCondition
|
||||||
|
ExpirationType HSetEXExpirationType
|
||||||
|
ExpirationVal int64
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c cmdable) HSetEX(ctx context.Context, key string, fieldsAndValues ...string) *IntCmd {
|
||||||
|
args := []interface{}{"HSETEX", key, "FIELDS", len(fieldsAndValues)}
|
||||||
|
for _, field := range fieldsAndValues {
|
||||||
|
args = append(args, field)
|
||||||
|
}
|
||||||
|
|
||||||
|
cmd := NewIntCmd(ctx, args...)
|
||||||
|
_ = c(ctx, cmd)
|
||||||
|
return cmd
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c cmdable) HSetEXWithArgs(ctx context.Context, key string, options HSetXOptions, fieldsAndValues ...string) *IntCmd {
|
||||||
|
// Start with the command name and key.
|
||||||
|
args := []interface{}{"HSETEX", key}
|
||||||
|
if options.Condition != "" {
|
||||||
|
args = append(args, string(options.Condition))
|
||||||
|
}
|
||||||
|
if options.ExpirationType != "" {
|
||||||
|
args = append(args, string(options.ExpirationType))
|
||||||
|
if options.ExpirationType != HSetEXExpirationKEEPTTL {
|
||||||
|
args = append(args, options.ExpirationVal)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
args = append(args, "FIELDS", len(fieldsAndValues))
|
||||||
|
for _, field := range fieldsAndValues {
|
||||||
|
args = append(args, field)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create and execute the command.
|
||||||
|
cmd := NewIntCmd(ctx, args...)
|
||||||
|
_ = c(ctx, cmd)
|
||||||
|
return cmd
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user