-
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathservice.go
More file actions
103 lines (80 loc) · 2.06 KB
/
service.go
File metadata and controls
103 lines (80 loc) · 2.06 KB
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
package main
import (
"context"
"fmt"
"log"
"os"
"github.com/hyp3rd/hypercache"
"github.com/hyp3rd/hypercache/internal/constants"
"github.com/hyp3rd/hypercache/pkg/middleware"
)
const (
cacheCapacity = 10
)
func main() {
var svc hypercache.Service
ctx, cancel := context.WithTimeout(context.Background(), constants.DefaultTimeout*2)
defer cancel()
hyperCache, err := hypercache.NewInMemoryWithDefaults(ctx, cacheCapacity)
defer hyperCache.Stop(ctx)
if err != nil {
fmt.Fprintln(os.Stderr, err)
return
}
// assign statsCollector of the backend to use it in middleware
statsCollector := hyperCache.StatsCollector
svc = hyperCache
// Example of using zap logger from uber
logger := log.Default()
// apply middleware in the same order as you want to execute them
svc = hypercache.ApplyMiddleware(
svc,
// middleware.YourMiddleware,
func(next hypercache.Service) hypercache.Service {
return middleware.NewLoggingMiddleware(next, logger)
},
func(next hypercache.Service) hypercache.Service {
return middleware.NewStatsCollectorMiddleware(next, statsCollector)
},
)
err = svc.Set(ctx, "key string", "value any", 0)
if err != nil {
fmt.Fprintln(os.Stderr, err)
return
}
key, ok := svc.Get(ctx, "key string")
if !ok {
fmt.Fprintln(os.Stdout, "key not found")
return
}
fmt.Fprintln(os.Stdout, key)
for i := range 10 {
err := svc.Set(ctx, fmt.Sprintf("key%v", i), fmt.Sprintf("val%v", i), 0)
if err != nil {
fmt.Fprintln(os.Stderr, err)
}
}
items, errs := svc.GetMultiple(ctx, "key1", "key7", "key9", "key9999")
for k, e := range errs {
fmt.Fprintf(os.Stderr, "error fetching item %s: %s\n", k, e)
}
for k, v := range items {
fmt.Fprintln(os.Stdout, k, v)
}
val, err := svc.GetOrSet(ctx, "key9999", "val9999", 0)
if err != nil {
fmt.Fprintln(os.Stderr, err)
return
}
fmt.Fprintln(os.Stdout, val)
err = svc.Remove(ctx, "key9999", "key1")
if err != nil {
fmt.Fprintln(os.Stderr, err)
}
// defer func() {
// err := svc.Stop(ctx)
// if err != nil {
// fmt.Fprintln(os.Stderr, err)
// }
// }()
}