MCPcopy Create free account
hub / github.com/go-dev-frame/sponge / MultiSet

Method MultiSet

pkg/cache/redis.go:90–132  ·  view source on GitHub ↗

MultiSet set multiple values

(ctx context.Context, valueMap map[string]interface{}, expiration time.Duration)

Source from the content-addressed store, hash-verified

88
89// MultiSet set multiple values
90func (c *redisCache) MultiSet(ctx context.Context, valueMap map[string]interface{}, expiration time.Duration) error {
91 if len(valueMap) == 0 {
92 return nil
93 }
94 //if expiration == 0 {
95 // expiration = DefaultExpireTime
96 //}
97
98 // the key-value is paired and has twice the capacity of a map
99 paris := make([]interface{}, 0, 2*len(valueMap))
100 for key, value := range valueMap {
101 buf, err := encoding.Marshal(c.encoding, value)
102 if err != nil {
103 fmt.Printf("encoding.Marshal error, %v, value:%v\n", err, value)
104 continue
105 }
106 cacheKey, err := BuildCacheKey(c.KeyPrefix, key)
107 if err != nil {
108 fmt.Printf("BuildCacheKey error, %v, key:%v\n", err, key)
109 continue
110 }
111 paris = append(paris, []byte(cacheKey))
112 paris = append(paris, buf)
113 }
114 pipeline := c.client.Pipeline()
115 err := pipeline.MSet(ctx, paris...).Err()
116 if err != nil {
117 return fmt.Errorf("pipeline.MSet error: %v", err)
118 }
119 for i := 0; i < len(paris); i = i + 2 {
120 switch paris[i].(type) {
121 case []byte:
122 pipeline.Expire(ctx, string(paris[i].([]byte)), expiration)
123 default:
124 fmt.Printf("redis expire is unsupported key type: %T\n", paris[i])
125 }
126 }
127 _, err = pipeline.Exec(ctx)
128 if err != nil {
129 return fmt.Errorf("pipeline.Exec error: %v", err)
130 }
131 return nil
132}
133
134// MultiGet get multiple values
135func (c *redisCache) MultiGet(ctx context.Context, keys []string, value interface{}) error {

Callers

nothing calls this directly

Calls 5

MarshalFunction · 0.92
BuildCacheKeyFunction · 0.85
PrintfMethod · 0.80
ErrorfMethod · 0.80
ErrMethod · 0.45

Tested by

no test coverage detected