/
delete.go
46 lines (39 loc) · 948 Bytes
/
delete.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package cache
import (
"context"
"fmt"
)
func (self *Cache) Delete(ctx context.Context, keys ...string) error {
if !self.useRedis() {
self.DeleteFromLocalCache(keys...)
return nil
}
if self.localCache == nil {
return self.DeleteFromRedis(ctx, keys...)
}
done := make(chan error)
go func() {
done <- self.DeleteFromRedis(ctx, keys...)
}()
self.DeleteFromLocalCache(keys...)
return <-done
}
func (self *Cache) DeleteFromLocalCache(keys ...string) {
if self.localCache != nil {
for _, key := range keys {
self.localCache.Del(self.ResolveKey(key))
}
}
}
func (self *Cache) DeleteFromRedis(ctx context.Context, keys ...string) error {
if self.useRedis() {
wrappedKeys := make([]string, len(keys))
for i, k := range keys {
wrappedKeys[i] = self.ResolveKey(k)
}
if err := self.redis.Del(ctx, wrappedKeys); err != nil {
return self.redisCacheError(fmt.Errorf("redis delete: %w", err))
}
}
return nil
}