Documentation ¶
Overview ¶
Example (AdvancedUsage) ¶
package main import ( "fmt" "github.com/go-redis/redis" "github.com/vmihailenco/msgpack" "github.com/go-redis/cache" ) type Object struct { Str string Num int } func main() { ring := redis.NewRing(&redis.RingOptions{ Addrs: map[string]string{ "server1": ":6379", "server2": ":6380", }, }) codec := &cache.Codec{ Redis: ring, Marshal: func(v interface{}) ([]byte, error) { return msgpack.Marshal(v) }, Unmarshal: func(b []byte, v interface{}) error { return msgpack.Unmarshal(b, v) }, } v, err := codec.Once(&cache.Item{ Key: "mykey", Object: new(Object), // destination Func: func() (interface{}, error) { return &Object{ Str: "mystring", Num: 42, }, nil }, }) if err != nil { panic(err) } fmt.Println(v.(*Object)) }
Output: &{mystring 42}
Example (BasicUsage) ¶
package main import ( "fmt" "time" "github.com/go-redis/redis" "github.com/vmihailenco/msgpack" "github.com/go-redis/cache" ) type Object struct { Str string Num int } func main() { ring := redis.NewRing(&redis.RingOptions{ Addrs: map[string]string{ "server1": ":6379", "server2": ":6380", }, }) codec := &cache.Codec{ Redis: ring, Marshal: func(v interface{}) ([]byte, error) { return msgpack.Marshal(v) }, Unmarshal: func(b []byte, v interface{}) error { return msgpack.Unmarshal(b, v) }, } key := "mykey" obj := &Object{ Str: "mystring", Num: 42, } codec.Set(&cache.Item{ Key: key, Object: obj, Expiration: time.Hour, }) var wanted Object if err := codec.Get(key, &wanted); err == nil { fmt.Println(wanted) } }
Output: {mystring 42}
Index ¶
- Variables
- type Codec
- func (cd *Codec) Delete(key string) error
- func (cd *Codec) Get(key string, object interface{}) error
- func (cd *Codec) Hits() int
- func (cd *Codec) Misses() int
- func (cd *Codec) Once(item *Item) (interface{}, error)
- func (cd *Codec) Set(item *Item) error
- func (cd *Codec) UseLocalCache(maxLen int, expiration time.Duration)
- type Item
Examples ¶
Constants ¶
This section is empty.
Variables ¶
View Source
var ErrCacheMiss = errors.New("cache: key is missing")
Functions ¶
This section is empty.
Types ¶
type Codec ¶
type Codec struct { Redis rediser Marshal func(interface{}) ([]byte, error) Unmarshal func([]byte, interface{}) error // contains filtered or unexported fields }
func (*Codec) Once ¶
Once gets the item.Object for the given item.Key from the cache or executes, caches, and returns the results of the given item.Func, making sure that only one execution is in-flight for a given item.Key at a time. If a duplicate comes in, the duplicate caller waits for the original to complete and receives the same results.
Directories ¶
Path | Synopsis |
---|---|
internal
|
|
singleflight
Package singleflight provides a duplicate function call suppression mechanism.
|
Package singleflight provides a duplicate function call suppression mechanism. |
Click to show internal directories.
Click to hide internal directories.