MultiSet set multiple values
(ctx context.Context, valueMap map[string]interface{}, expiration time.Duration)
| 88 | |
| 89 | // MultiSet set multiple values |
| 90 | func (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 |
| 135 | func (c *redisCache) MultiGet(ctx context.Context, keys []string, value interface{}) error { |
nothing calls this directly
no test coverage detected