Documentation ¶
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
View Source
var ( ErrCacheMiss = errors.New("cache miss") ErrCacheExpired = errors.New("cache expired") ErrSourceNotValid = errors.New("source is not valid") ErrTargetNil = errors.New("target is nil") )
Cached errors.
Functions ¶
func TypeAssert ¶ added in v0.0.2
func TypeAssert(source, target interface{}) (err error)
TypeAssert assert source to target.
Types ¶
type Cache ¶
type Cache struct {
// contains filtered or unexported fields
}
Cache base cache.
Example (ClearByContext) ¶
package main import ( "context" "fmt" "time" "gitoa.ru/go-4devs/cache" "gitoa.ru/go-4devs/cache/mw" "gitoa.ru/go-4devs/cache/provider/memory" ) func main() { ctx, cancel := context.WithCancel(context.Background()) c := cache.New(provider(), mw.WithClearByContext(), cache.WithDataOption(cache.WithNamespace("clear_by_ctx", "")), ) var cached, cached2 string fmt.Printf("err: %v\n", c.Set(ctx, 1, "some ctx loaded data", cache.WithTTL(time.Hour))) fmt.Printf("err: %v, value: '%v'\n", c.Get(ctx, 1, &cached), cached) cancel() time.Sleep(time.Millisecond) fmt.Printf("err: %v, value: '%v'\n", c.Get(context.TODO(), 1, &cached2), cached2) } func provider() cache.Provider { return memory.NewMap() }
Output: err: <nil> err: <nil>, value: 'some ctx loaded data' err: cache miss: map, value: ''
Example (ClearByTTL) ¶
package main import ( "context" "fmt" "time" "gitoa.ru/go-4devs/cache" "gitoa.ru/go-4devs/cache/mw" "gitoa.ru/go-4devs/cache/provider/memory" ) func main() { ctx := context.Background() c := cache.New(provider(), mw.WithClearByTTL(), cache.WithDataOption(cache.WithNamespace("clear_by_ttl", "")), ) var cached, cached2 string fmt.Printf("err: %v\n", c.Set(ctx, 1, "some ttl loaded data", cache.WithTTL(time.Microsecond*200))) fmt.Printf("err: %v, value: '%v'\n", c.Get(ctx, 1, &cached), cached) time.Sleep(time.Second) fmt.Printf("err: %v, value: '%v'\n", c.Get(ctx, 1, &cached2), cached2) } func provider() cache.Provider { return memory.NewMap() }
Output: err: <nil> err: <nil>, value: 'some ttl loaded data' err: cache miss: map, value: ''
Example (Encoding) ¶
package main import ( "context" "fmt" "gitoa.ru/go-4devs/cache" "gitoa.ru/go-4devs/cache/provider/memory" "gitoa.ru/go-4devs/encoding/json" ) func main() { ctx := context.Background() c := cache.New(memory.NewEncoding(memory.WithEncoding(json.Encode, json.Decode))) var cached string fmt.Printf("err: %v, value: '%v'\n", c.Get(ctx, "not found key", &cached), cached) fmt.Printf("err: %v\n", c.Set(ctx, "key", "some value")) fmt.Printf("err: %v, value: '%v'\n", c.Get(ctx, "key", &cached), cached) }
Output: err: cache miss: encoding, value: '' err: <nil> err: <nil>, value: 'some value'
Example (Lru) ¶
package main import ( "context" "fmt" "time" glru "github.com/hashicorp/golang-lru" "gitoa.ru/go-4devs/cache" "gitoa.ru/go-4devs/cache/provider/lru" ) func main() { ctx := context.Background() client, _ := glru.New(10) c := cache.New(lru.New(client), cache.WithDataOption(cache.WithTTL(time.Hour))) var cached string fmt.Printf("err: %v, value: '%v'\n", c.Get(ctx, "not found lru key", &cached), cached) fmt.Printf("err: %v\n", c.Set(ctx, "key", "some lru value")) fmt.Printf("err: %v, value: '%v'\n", c.Get(ctx, "key", &cached), cached) fmt.Printf("deleted err: %v\n", c.Delete(ctx, "key")) }
Output: err: cache miss: lru, value: '' err: <nil> err: <nil>, value: 'some lru value' deleted err: <nil>
Example (Map) ¶
package main import ( "context" "fmt" "gitoa.ru/go-4devs/cache" "gitoa.ru/go-4devs/cache/provider/memory" ) func main() { ctx := context.Background() c := cache.New(memory.NewMap()) var cached string fmt.Printf("err: %v, value: '%v'\n", c.Get(ctx, "not found key", &cached), cached) fmt.Printf("err: %v\n", c.Set(ctx, "key", "some value")) fmt.Printf("err: %v, value: '%v'\n", c.Get(ctx, "key", &cached), cached) }
Output: err: cache miss: map, value: '' err: <nil> err: <nil>, value: 'some value'
Example (Memacache) ¶
package main import ( "context" "fmt" "gitoa.ru/go-4devs/cache" "gitoa.ru/go-4devs/cache/provider/memcache" "gitoa.ru/go-4devs/cache/test" ) func main() { ctx := context.Background() c := cache.New(memcache.New(test.MemcacheCient()), cache.WithDataOption(cache.WithNamespace("memcache", ":"))) var cached string fmt.Printf("err: %v, value: '%v'\n", c.Get(ctx, "not found memcached key", &cached), cached) fmt.Printf("err: %v, value: '%v'\n", c.Get(ctx, "not:found:memcached:key", &cached), cached) fmt.Printf("err: %v\n", c.Set(ctx, "key", "some mamcache value")) fmt.Printf("err: %v, value: '%v'\n", c.Get(ctx, "key", &cached), cached) }
Output: err: malformed: key is too long or contains invalid characters, value: '' err: cache miss: memcache: cache miss, value: '' err: <nil> err: <nil>, value: 'some mamcache value'
Example (Redis) ¶
package main import ( "context" "fmt" "gitoa.ru/go-4devs/cache" "gitoa.ru/go-4devs/cache/provider/redis" "gitoa.ru/go-4devs/cache/test" ) func main() { ctx := context.Background() c := cache.New(redis.New(test.RedisClient())) var cached string fmt.Printf("err: %v, value: '%v'\n", c.Get(ctx, "not found redis key", &cached), cached) fmt.Printf("err: %v\n", c.Set(ctx, "key", "some redis value", cache.WithNamespace("redis", ":"))) fmt.Printf("err: %v, value: '%v'\n", c.Get(ctx, "redis:key", &cached), cached) }
Output: err: cache miss: redis, value: '' err: <nil> err: <nil>, value: 'some redis value'
Example (WithFallback) ¶
package main import ( "context" "fmt" "gitoa.ru/go-4devs/cache" "gitoa.ru/go-4devs/cache/mw" "gitoa.ru/go-4devs/cache/provider/memory" ) func main() { ctx := context.Background() c := cache.New(provider(), mw.WithFallback( mw.CachesFallbackSuccess(func(ctx context.Context, d *cache.Item) error { fmt.Printf("loaded key: %#v\n", d.Key.Key) return cache.TypeAssert("some loaded data", d.Value) }), func(i *cache.Item, e error) bool { return e != nil }, )) var cached, cached2 string fmt.Printf("err: %v, value: '%v'\n", c.Get(ctx, 1, &cached), cached) fmt.Printf("err: %v, value: '%v'\n", c.Get(ctx, 1, &cached2), cached2) } func provider() cache.Provider { return memory.NewMap() }
Output: loaded key: 1 err: <nil>, value: 'some loaded data' err: <nil>, value: 'some loaded data'
Example (WithMetrics) ¶
package main import ( "context" "fmt" prom "github.com/prometheus/client_golang/prometheus" "gitoa.ru/go-4devs/cache" "gitoa.ru/go-4devs/cache/mw" "gitoa.ru/go-4devs/cache/mw/prometheus" "gitoa.ru/go-4devs/cache/provider/memory" ) func main() { ctx := context.Background() cacheLabel := "cache_label" c := cache.New(provider(), mw.WithMetrics(prometheus.Metrics{}, mw.LabelName(cacheLabel)), cache.WithDataOption(cache.WithNamespace("metrics", ":")), ) var cached, cached2 string fmt.Printf("err: %v, value: '%v'\n", c.Get(ctx, 1, &cached), cached) fmt.Printf("err: %v\n", c.Set(ctx, 1, "cached")) fmt.Printf("err: %v, value: '%v'\n", c.Get(ctx, 1, &cached2), cached2) mfs, _ := prom.DefaultGatherer.Gather() for _, mf := range mfs { for _, metric := range mf.GetMetric() { label := metric.GetLabel() if len(label) > 0 && metric.Counter != nil { fmt.Printf("name:%s, label:%s, value: %.0f\n", *mf.Name, *label[0].Value, mf.GetMetric()[0].Counter.GetValue()) } } } } func provider() cache.Provider { return memory.NewMap() }
Output: err: cache miss: map, value: '' err: <nil> err: <nil>, value: 'cached' name:cache_hit_total, label:cache_label, value: 1 name:cache_miss_total, label:cache_label, value: 1
Example (WithNamespace) ¶
package main import ( "context" "fmt" "time" "gitoa.ru/go-4devs/cache" "gitoa.ru/go-4devs/cache/provider/memory" ) func main() { ctx := context.Background() c := cache.New(provider(), cache.WithDataOption( cache.WithNamespace("prefix", ":"), cache.WithTTL(time.Hour), )) var cached, cached2 string fmt.Printf("prefix err: %v, value: '%v'\n", c.Get(ctx, "key", &cached), cached) fmt.Printf("prefix err: %v\n", c.Set(ctx, "key", "some value", cache.WithTTL(time.Minute))) fmt.Printf("prefix2 err: %v\n", c.Set(ctx, "key", "some value2", cache.WithNamespace("prefix2", ":"))) fmt.Printf("prefix err: %v, value: '%v'\n", c.Get(ctx, "key", &cached), cached) fmt.Printf("prefix2 err: %v, value: '%v'\n", c.Get(ctx, "key", &cached2, cache.WithNamespace("prefix2", ":")), cached2) } func provider() cache.Provider { return memory.NewMap() }
Output: prefix err: cache miss: map, value: '' prefix err: <nil> prefix2 err: <nil> prefix err: <nil>, value: 'some value' prefix2 err: <nil>, value: 'some value2'
func (*Cache) Delete ¶ added in v0.1.0
Delete handles middlewares and delete value by key and options.
type Configure ¶ added in v0.1.0
type Configure func(*Cache)
Configure configure cache.
func WithDataOption ¶ added in v0.1.0
WithDataOption sets cache default data options.
func WithHandle ¶ added in v0.1.0
WithHandle sets get/set/delete handler.
func WithHandleCache ¶ added in v0.1.0
func WithHandleDelete ¶ added in v0.1.0
WithHandleDelete sets handlers delete.
func WithHandleGet ¶ added in v0.1.0
WithHandleGet sets handlers get.
func WithHandleSet ¶ added in v0.1.0
WithHandleSet sets handlers set.
type ErrorTarget ¶ added in v0.0.2
type ErrorTarget struct {
// contains filtered or unexported fields
}
ErrorTarget errs target is not a settable.
func NewErrorTarget ¶ added in v0.0.2
func NewErrorTarget(target interface{}) ErrorTarget
NewErrorTarget creates new error.
type Item ¶ added in v0.1.0
Item to get/set/delete in provider.
func (*Item) TTLInSecond ¶ added in v0.1.0
TTLInSecond sets ttl by seconds.
type Operation ¶ added in v0.1.0
type Operation int
Operation cache operation.
available opearation.
type Option ¶ added in v0.1.0
type Option func(*Item)
Option for get/set/delete methods.
func WithNamespace ¶ added in v0.1.0
WithNamespace sets prefix and separator.
Source Files ¶
Click to show internal directories.
Click to hide internal directories.