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
| package main
import ( "context" "fmt" "time"
"github.com/go-redis/cache/v8" "github.com/go-redis/redis/v8" )
var ( mycache = cache.New(&cache.Options{ Redis: redis.NewRing(&redis.RingOptions{ Addrs: map[string]string{ "server": ":6379", }, }), LocalCache: cache.NewTinyLFU(1000, time.Minute), }) )
type Object struct { Str string Num int }
func main() { basicUsage() advancedUsage() }
func basicUsage() { ctx := context.TODO() key := "mykey" obj := &Object{ Str: "mystring", Num: 42, } if err := mycache.Set(&cache.Item{ Ctx: ctx, Key: key, Value: obj, TTL: time.Hour, }); err != nil { panic(err) } var wanted Object if err := mycache.Get(ctx, key, &wanted); err == nil { fmt.Println(wanted) } }
func advancedUsage() { obj := new(Object) err := mycache.Once(&cache.Item{ Key: "mykey", Value: obj, Do: func(*cache.Item) (interface{}, error) { return &Object{ Str: "mystring", Num: 42, }, nil }, }) if err != nil { panic(err) } fmt.Println(obj) }
|