Skip to content

Commit 6d3d60b

Browse files
Add IsCacheHit methods to compat for CacheCompat supported commands (#959)
Adding changes for #957 Please review. --------- Co-authored-by: Rueian <rueiancsie@gmail.com>
1 parent 76ba064 commit 6d3d60b

3 files changed

Lines changed: 331 additions & 23 deletions

File tree

rueidiscompat/adapter.go

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1610,15 +1610,16 @@ func (c *Compat) HGetEXWithArgs(ctx context.Context, key string, options *HGetEX
16101610
}
16111611

16121612
var cmd rueidis.Completed
1613-
if options.ExpirationType == HGetEXExpirationEX {
1613+
switch options.ExpirationType {
1614+
case HGetEXExpirationEX:
16141615
cmd = c.client.B().Hgetex().Key(key).Ex(options.ExpirationVal).Fields().Numfields(int64(len(fields))).Field(fields...).Build()
1615-
} else if options.ExpirationType == HGetEXExpirationPX {
1616+
case HGetEXExpirationPX:
16161617
cmd = c.client.B().Hgetex().Key(key).Px(options.ExpirationVal).Fields().Numfields(int64(len(fields))).Field(fields...).Build()
1617-
} else if options.ExpirationType == HGetEXExpirationEXAT {
1618+
case HGetEXExpirationEXAT:
16181619
cmd = c.client.B().Hgetex().Key(key).Exat(options.ExpirationVal).Fields().Numfields(int64(len(fields))).Field(fields...).Build()
1619-
} else if options.ExpirationType == HGetEXExpirationPXAT {
1620+
case HGetEXExpirationPXAT:
16201621
cmd = c.client.B().Hgetex().Key(key).Pxat(options.ExpirationVal).Fields().Numfields(int64(len(fields))).Field(fields...).Build()
1621-
} else if options.ExpirationType == HGetEXExpirationPERSIST {
1622+
case HGetEXExpirationPERSIST:
16221623
cmd = c.client.B().Hgetex().Key(key).Persist().Fields().Numfields(int64(len(fields))).Field(fields...).Build()
16231624
}
16241625
resp := c.client.Do(ctx, cmd)
@@ -1643,28 +1644,31 @@ func (c *Compat) HSetEXWithArgs(ctx context.Context, key string, options *HSetEX
16431644
}
16441645

16451646
var partial cmds.HsetexFieldValue
1646-
if options.Condition == HSetEXFNX {
1647-
if options.ExpirationType == HSetEXExpirationEX {
1647+
switch options.Condition {
1648+
case HSetEXFNX:
1649+
switch options.ExpirationType {
1650+
case HSetEXExpirationEX:
16481651
partial = c.client.B().Hsetex().Key(key).Fnx().Ex(options.ExpirationVal).Fields().Numfields(int64(len(fieldsAndValues) / 2)).FieldValue()
1649-
} else if options.ExpirationType == HSetEXExpirationPX {
1652+
case HSetEXExpirationPX:
16501653
partial = c.client.B().Hsetex().Key(key).Fnx().Px(options.ExpirationVal).Fields().Numfields(int64(len(fieldsAndValues) / 2)).FieldValue()
1651-
} else if options.ExpirationType == HSetEXExpirationEXAT {
1654+
case HSetEXExpirationEXAT:
16521655
partial = c.client.B().Hsetex().Key(key).Fnx().Exat(options.ExpirationVal).Fields().Numfields(int64(len(fieldsAndValues) / 2)).FieldValue()
1653-
} else if options.ExpirationType == HSetEXExpirationPXAT {
1656+
case HSetEXExpirationPXAT:
16541657
partial = c.client.B().Hsetex().Key(key).Fnx().Pxat(options.ExpirationVal).Fields().Numfields(int64(len(fieldsAndValues) / 2)).FieldValue()
1655-
} else if options.ExpirationType == HSetEXExpirationKEEPTTL {
1658+
case HSetEXExpirationKEEPTTL:
16561659
partial = c.client.B().Hsetex().Key(key).Fnx().Keepttl().Fields().Numfields(int64(len(fieldsAndValues) / 2)).FieldValue()
16571660
}
1658-
} else if options.Condition == HSetEXFXX {
1659-
if options.ExpirationType == HSetEXExpirationEX {
1661+
case HSetEXFXX:
1662+
switch options.ExpirationType {
1663+
case HSetEXExpirationEX:
16601664
partial = c.client.B().Hsetex().Key(key).Fxx().Ex(options.ExpirationVal).Fields().Numfields(int64(len(fieldsAndValues) / 2)).FieldValue()
1661-
} else if options.ExpirationType == HSetEXExpirationPX {
1665+
case HSetEXExpirationPX:
16621666
partial = c.client.B().Hsetex().Key(key).Fxx().Px(options.ExpirationVal).Fields().Numfields(int64(len(fieldsAndValues) / 2)).FieldValue()
1663-
} else if options.ExpirationType == HSetEXExpirationEXAT {
1667+
case HSetEXExpirationEXAT:
16641668
partial = c.client.B().Hsetex().Key(key).Fxx().Exat(options.ExpirationVal).Fields().Numfields(int64(len(fieldsAndValues) / 2)).FieldValue()
1665-
} else if options.ExpirationType == HSetEXExpirationPXAT {
1669+
case HSetEXExpirationPXAT:
16661670
partial = c.client.B().Hsetex().Key(key).Fxx().Pxat(options.ExpirationVal).Fields().Numfields(int64(len(fieldsAndValues) / 2)).FieldValue()
1667-
} else if options.ExpirationType == HSetEXExpirationKEEPTTL {
1671+
case HSetEXExpirationKEEPTTL:
16681672
partial = c.client.B().Hsetex().Key(key).Fxx().Keepttl().Fields().Numfields(int64(len(fieldsAndValues) / 2)).FieldValue()
16691673
}
16701674
}

rueidiscompat/command.go

Lines changed: 47 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,18 @@ type Cmder interface {
4646
}
4747

4848
type baseCmd[T any] struct {
49-
err error
50-
val T
51-
rawVal any
49+
err error
50+
val T
51+
rawVal any
52+
isCacheHit bool
53+
}
54+
55+
func (cmd *baseCmd[T]) setIsCacheHit(val bool) {
56+
cmd.isCacheHit = val
57+
}
58+
59+
func (cmd *baseCmd[T]) IsCacheHit() bool {
60+
return cmd.isCacheHit
5261
}
5362

5463
func (cmd *baseCmd[T]) SetVal(val T) {
@@ -94,6 +103,7 @@ func (cmd *Cmd) from(res rueidis.RedisResult) {
94103
return
95104
}
96105
cmd.SetVal(val)
106+
cmd.setIsCacheHit(res.IsCacheHit())
97107
}
98108

99109
func newCmd(res rueidis.RedisResult) *Cmd {
@@ -355,6 +365,7 @@ func (cmd *StringCmd) from(res rueidis.RedisResult) {
355365
val, err := res.ToString()
356366
cmd.SetErr(err)
357367
cmd.SetVal(val)
368+
cmd.setIsCacheHit(res.IsCacheHit())
358369
}
359370

360371
func newStringCmd(res rueidis.RedisResult) *StringCmd {
@@ -433,6 +444,7 @@ func (cmd *BoolCmd) from(res rueidis.RedisResult) {
433444
}
434445
cmd.SetVal(val)
435446
cmd.SetErr(err)
447+
cmd.setIsCacheHit(res.IsCacheHit())
436448
}
437449

438450
func newBoolCmd(res rueidis.RedisResult) *BoolCmd {
@@ -474,6 +486,7 @@ func (cmd *DurationCmd) from(res rueidis.RedisResult) {
474486
return
475487
}
476488
cmd.SetVal(time.Duration(val))
489+
cmd.setIsCacheHit(res.IsCacheHit())
477490
}
478491

479492
func newDurationCmd(res rueidis.RedisResult, precision time.Duration) *DurationCmd {
@@ -529,6 +542,7 @@ func (cmd *SliceCmd) from(res rueidis.RedisResult) {
529542
}
530543
}
531544
cmd.SetVal(vals)
545+
cmd.setIsCacheHit(res.IsCacheHit())
532546
}
533547

534548
// newSliceCmd returns SliceCmd according to input arguments, if the caller is JSONObjKeys,
@@ -557,6 +571,7 @@ func (cmd *StringSliceCmd) from(res rueidis.RedisResult) {
557571
val, err := res.AsStrSlice()
558572
cmd.SetVal(val)
559573
cmd.SetErr(err)
574+
cmd.setIsCacheHit(res.IsCacheHit())
560575
}
561576

562577
func newStringSliceCmd(res rueidis.RedisResult) *StringSliceCmd {
@@ -566,13 +581,14 @@ func newStringSliceCmd(res rueidis.RedisResult) *StringSliceCmd {
566581
}
567582

568583
type IntSliceCmd struct {
569-
err error
570-
val []int64
584+
err error
585+
val []int64
586+
isCacheHit bool
571587
}
572588

573589
func (cmd *IntSliceCmd) from(res rueidis.RedisResult) {
574590
cmd.val, cmd.err = res.AsIntSlice()
575-
591+
cmd.setIsCacheHit(res.IsCacheHit())
576592
}
577593

578594
func newIntSliceCmd(res rueidis.RedisResult) *IntSliceCmd {
@@ -581,6 +597,10 @@ func newIntSliceCmd(res rueidis.RedisResult) *IntSliceCmd {
581597
return cmd
582598
}
583599

600+
func (cmd *IntSliceCmd) setIsCacheHit(isCacheHit bool) {
601+
cmd.isCacheHit = isCacheHit
602+
}
603+
584604
func (cmd *IntSliceCmd) SetVal(val []int64) {
585605
cmd.val = val
586606
}
@@ -601,6 +621,10 @@ func (cmd *IntSliceCmd) Result() ([]int64, error) {
601621
return cmd.val, cmd.err
602622
}
603623

624+
func (cmd *IntSliceCmd) IsCacheHit() bool {
625+
return cmd.isCacheHit
626+
}
627+
604628
type BoolSliceCmd struct {
605629
baseCmd[[]bool]
606630
}
@@ -616,6 +640,7 @@ func (cmd *BoolSliceCmd) from(res rueidis.RedisResult) {
616640
val = append(val, i == 1)
617641
}
618642
cmd.SetVal(val)
643+
cmd.setIsCacheHit(res.IsCacheHit())
619644
}
620645

621646
func newBoolSliceCmd(res rueidis.RedisResult) *BoolSliceCmd {
@@ -632,6 +657,7 @@ func (cmd *FloatSliceCmd) from(res rueidis.RedisResult) {
632657
val, err := res.AsFloatSlice()
633658
cmd.SetErr(err)
634659
cmd.SetVal(val)
660+
cmd.setIsCacheHit(res.IsCacheHit())
635661
}
636662

637663
func newFloatSliceCmd(res rueidis.RedisResult) *FloatSliceCmd {
@@ -653,6 +679,7 @@ func (cmd *ZSliceCmd) from(res rueidis.RedisResult) {
653679
return
654680
}
655681
cmd.SetVal([]Z{{Member: s.Member, Score: s.Score}})
682+
cmd.setIsCacheHit(res.IsCacheHit())
656683
} else {
657684
scores, err := res.AsZScores()
658685
if err != nil {
@@ -664,6 +691,7 @@ func (cmd *ZSliceCmd) from(res rueidis.RedisResult) {
664691
val = append(val, Z{Member: s.Member, Score: s.Score})
665692
}
666693
cmd.SetVal(val)
694+
cmd.setIsCacheHit(res.IsCacheHit())
667695
}
668696
}
669697

@@ -687,6 +715,7 @@ func (cmd *FloatCmd) from(res rueidis.RedisResult) {
687715
val, err := res.AsFloat64()
688716
cmd.SetErr(err)
689717
cmd.SetVal(val)
718+
cmd.setIsCacheHit(res.IsCacheHit())
690719
}
691720

692721
func newFloatCmd(res rueidis.RedisResult) *FloatCmd {
@@ -881,6 +910,7 @@ func (cmd *StringStringMapCmd) from(res rueidis.RedisResult) {
881910
val, err := res.AsStrMap()
882911
cmd.SetErr(err)
883912
cmd.SetVal(val)
913+
cmd.setIsCacheHit(res.IsCacheHit())
884914
}
885915

886916
func newStringStringMapCmd(res rueidis.RedisResult) *StringStringMapCmd {
@@ -1753,6 +1783,7 @@ func (cmd *RankWithScoreCmd) from(res rueidis.RedisResult) {
17531783
cmd.val.Score, _ = vs[1].AsFloat64()
17541784
}
17551785
}
1786+
cmd.setIsCacheHit(res.IsCacheHit())
17561787
}
17571788

17581789
func newRankWithScoreCmd(res rueidis.RedisResult) *RankWithScoreCmd {
@@ -2027,6 +2058,7 @@ func (cmd *GeoPosCmd) from(res rueidis.RedisResult) {
20272058
})
20282059
}
20292060
cmd.SetVal(val)
2061+
cmd.setIsCacheHit(res.IsCacheHit())
20302062
}
20312063

20322064
func newGeoPosCmd(res rueidis.RedisResult) *GeoPosCmd {
@@ -2041,6 +2073,7 @@ type GeoLocationCmd struct {
20412073

20422074
func (cmd *GeoLocationCmd) from(res rueidis.RedisResult) {
20432075
cmd.val, cmd.err = res.AsGeosearch()
2076+
cmd.setIsCacheHit(res.IsCacheHit())
20442077
}
20452078

20462079
func newGeoLocationCmd(res rueidis.RedisResult) *GeoLocationCmd {
@@ -2674,6 +2707,7 @@ func (cmd *BFInfoCmd) from(res rueidis.RedisResult) {
26742707
return
26752708
}
26762709
cmd.SetVal(info)
2710+
cmd.setIsCacheHit(res.IsCacheHit())
26772711
}
26782712

26792713
func newBFInfoCmd(res rueidis.RedisResult) *BFInfoCmd {
@@ -2764,6 +2798,7 @@ func (cmd *CFInfoCmd) from(res rueidis.RedisResult) {
27642798
return
27652799
}
27662800
cmd.SetVal(info)
2801+
cmd.setIsCacheHit(res.IsCacheHit())
27672802
}
27682803

27692804
func newCFInfoCmd(res rueidis.RedisResult) *CFInfoCmd {
@@ -2800,6 +2835,7 @@ func (cmd *CMSInfoCmd) from(res rueidis.RedisResult) {
28002835
return
28012836
}
28022837
cmd.SetVal(info)
2838+
cmd.setIsCacheHit(res.IsCacheHit())
28032839
}
28042840

28052841
func newCMSInfoCmd(res rueidis.RedisResult) *CMSInfoCmd {
@@ -2855,6 +2891,7 @@ func (cmd *TopKInfoCmd) from(res rueidis.RedisResult) {
28552891
return
28562892
}
28572893
cmd.SetVal(info)
2894+
cmd.setIsCacheHit(res.IsCacheHit())
28582895
}
28592896

28602897
func newTopKInfoCmd(res rueidis.RedisResult) *TopKInfoCmd {
@@ -2874,6 +2911,7 @@ func (cmd *MapStringIntCmd) from(res rueidis.RedisResult) {
28742911
return
28752912
}
28762913
cmd.SetVal(m)
2914+
cmd.setIsCacheHit(res.IsCacheHit())
28772915
}
28782916

28792917
func newMapStringIntCmd(res rueidis.RedisResult) *MapStringIntCmd {
@@ -3281,6 +3319,7 @@ func (cmd *JSONCmd) from(res rueidis.RedisResult) {
32813319
cmd.SetErr(err)
32823320
return
32833321
}
3322+
cmd.setIsCacheHit(res.IsCacheHit())
32843323
switch {
32853324
// JSON.GET
32863325
case msg.IsString():
@@ -3362,6 +3401,7 @@ func (cmd *IntPointerSliceCmd) from(res rueidis.RedisResult) {
33623401
intPtrSlice[i] = &length
33633402
}
33643403
cmd.SetVal(intPtrSlice)
3404+
cmd.setIsCacheHit(res.IsCacheHit())
33653405
}
33663406

33673407
// newIntPointerSliceCmd initialises an IntPointerSliceCmd
@@ -3394,6 +3434,7 @@ func (cmd *JSONSliceCmd) from(res rueidis.RedisResult) {
33943434
anySlice[i] = anyE
33953435
}
33963436
cmd.SetVal(anySlice)
3437+
cmd.setIsCacheHit(res.IsCacheHit())
33973438
}
33983439

33993440
func newJSONSliceCmd(res rueidis.RedisResult) *JSONSliceCmd {

0 commit comments

Comments
 (0)