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)
},
}
obj := new(Object)
err := codec.Once(&cache.Item{
Key: "mykey",
Object: obj, // destination
Func: func() (interface{}, error) {
return &Object{
Str: "mystring",
Num: 42,
}, nil
},
})
if err != nil {
panic(err)
}
fmt.Println(obj)
}
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
- func SetLogger(logger internal.Logger)
- type Codec
- func (cd *Codec) AddHook(h Hook)
- func (cd *Codec) Delete(key string) error
- func (cd *Codec) DeleteContext(c context.Context, key string) error
- func (cd *Codec) Exists(key string) bool
- func (cd *Codec) Get(key string, object interface{}) error
- func (cd *Codec) GetContext(c context.Context, key string, object interface{}) error
- func (cd *Codec) Once(item *Item) error
- func (cd *Codec) Set(item *Item) error
- func (cd *Codec) Stats() *Stats
- func (cd *Codec) UseLocalCache(maxLen int, expiration time.Duration)
- type Hook
- type Item
- type Stats
Examples ¶
Constants ¶
This section is empty.
Variables ¶
View Source
var ErrCacheMiss = errors.New("cache: key is missing")
Functions ¶
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) GetContext ¶
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.
type Hook ¶
type Hook interface {
BeforeSet(item *Item) error
AfterSet(item *Item) error
BeforeGet(c context.Context, key string, object interface{}) (context.Context, error)
AfterGet(c context.Context, key string, object interface{}) (context.Context, error)
BeforeDelete(c context.Context, key string) (context.Context, error)
AfterDelete(c context.Context, key string) (context.Context, error)
BeforeOnce(item *Item) error
AfterOnce(item *Item) error
}
Directories
¶
| Path | Synopsis |
|---|---|
|
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.