cachext

package
v0.13.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 31, 2020 License: MIT Imports: 13 Imported by: 0

Documentation

Index

Examples

Constants

View Source
const Nil = cacheNil("cache result is nil")

Variables

This section is empty.

Functions

func RegisteBackend

func RegisteBackend(configBackend string, backendFunc func() CacheBackend) error

RegisteBackend if you want a new backend, use this func to registe your backend then load it by config

func WithCacheNil

func WithCacheNil(cacheNil bool) cacheOption

WithCacheNil set whether cacheNil to cacheFuncConfig, if cacheNil seted and function returns nil, GetResult will return Nil cacheNil stored in redis with []byte{192} 0xC0

func WithMakeCacheKey

func WithMakeCacheKey(f makeCacheKeyFunc) cacheOption

WithMakeCacheKey you can write your own makeCacheKey, use this func to change the default makeCacheKey. first param means funcName, the second param means version, next params mean real function input param.

func WithTTL

func WithTTL(ttl time.Duration) cacheOption

WithTTL set ttl to the CachedConfig object, ttl must be a positive number

func WithVersion

func WithVersion(version int64) cacheOption

WithVersion set version to the cacheFuncConfig object, if you want a function's all cache update immediately, change the version.

Types

type CacheBackend

type CacheBackend interface {
	Init(*viper.Viper) error
	Get(context.Context, string) ([]byte, error) // if record not exist, return (nil, nil)
	Set(context.Context, string, []byte, time.Duration) error
	SetMany(context.Context, map[string][]byte, time.Duration) error
	GetMany(context.Context, []string) [][]byte // if record not exist, use nil instead
	Delete(context.Context, string) bool
	DeleteMany(context.Context, []string) bool
	Expire(context.Context, string, time.Duration) bool
	TTL(context.Context, string) time.Duration
	Exists(context.Context, string) bool
	Close() error
}

type CacheExt

type CacheExt struct {
	NS string
	// contains filtered or unexported fields
}

CacheExt

func (*CacheExt) Application

func (c *CacheExt) Application() *gobay.Application

Application

func (*CacheExt) Cached

func (c *CacheExt) Cached(funcName string, f cachedFunc, options ...cacheOption) *CachedConfig

Cached return a ptr with two function: MakeCacheKey and GetResult

Example
package main

import (
	"context"
	"fmt"
	"strings"
	"time"

	"github.com/shanbay/gobay"
	"github.com/shanbay/gobay/extensions/cachext"

	_ "github.com/shanbay/gobay/extensions/cachext/backend/memory"
)

func main() {
	cache := &cachext.CacheExt{NS: "cache_"}
	exts := map[gobay.Key]gobay.Extension{
		"cache": cache,
	}
	if _, err := gobay.CreateApp("../../testdata/", "testing", exts); err != nil {
		fmt.Println(err)
		return
	}

	var call_times = 0
	var err error

	f := func(_ context.Context, keys []string, arg []int64) (interface{}, error) {
		call_times += 1
		res := make([]string, 2)
		res[0] = keys[0]
		res[1] = keys[0]
		return res, nil
	}
	cachedFunc := cache.Cached("f", f, cachext.WithTTL(10*time.Second), cachext.WithVersion(1), cachext.WithMakeCacheKey(
		func(funcName string, version int64, strArgs []string, intArgs []int64) string {
			return strings.Join(strArgs, "_")
		},
	))

	zero_res := make([]string, 2)
	for i := 0; i <= 1; i++ {
		if err := cachedFunc.GetResult(context.Background(), &zero_res, []string{"hello", "world"}, []int64{}); err != nil {
			fmt.Println("Cache set Failed")
		}
	}
	err = cachedFunc.GetResult(context.Background(), &zero_res, []string{"hello", "world"}, []int64{})
	fmt.Println(zero_res, call_times, err)
}
Output:

[hello hello] 1 <nil>

func (*CacheExt) Close

func (c *CacheExt) Close() error

Close

func (*CacheExt) Delete

func (c *CacheExt) Delete(ctx context.Context, key string) bool

Delete

func (*CacheExt) DeleteMany

func (c *CacheExt) DeleteMany(ctx context.Context, keys ...string) bool

DeleteMany

func (*CacheExt) Exists

func (c *CacheExt) Exists(ctx context.Context, key string) bool

Exists

func (*CacheExt) Expire

func (c *CacheExt) Expire(ctx context.Context, key string, ttl time.Duration) bool

Expire

func (*CacheExt) Get

func (c *CacheExt) Get(ctx context.Context, key string, m interface{}) (bool, error)

Get

func (*CacheExt) GetMany

func (c *CacheExt) GetMany(ctx context.Context, out map[string]interface{}) error

GetMany out map[string]*someStruct

func (*CacheExt) Init

func (c *CacheExt) Init(app *gobay.Application) error

Init init a cache extension

func (*CacheExt) Object

func (c *CacheExt) Object() interface{}

Object

func (*CacheExt) Set

func (c *CacheExt) Set(ctx context.Context, key string, value interface{}, ttl time.Duration) error

Set

Example
package main

import (
	"context"
	"fmt"
	"time"

	"github.com/shanbay/gobay"
	"github.com/shanbay/gobay/extensions/cachext"

	_ "github.com/shanbay/gobay/extensions/cachext/backend/memory"
)

func main() {
	cache := &cachext.CacheExt{NS: "cache_"}
	exts := map[gobay.Key]gobay.Extension{
		"cache": cache,
	}
	if _, err := gobay.CreateApp("../../testdata/", "testing", exts); err != nil {
		fmt.Println(err)
		return
	}

	var key = "cache_key"
	err := cache.Set(context.Background(), key, "hello", 10*time.Second)
	fmt.Println(err)
	var res string
	exists, err := cache.Get(context.Background(), key, &res)
	fmt.Println(exists, res, err)
}
Output:

<nil>
true hello <nil>

func (*CacheExt) SetMany

func (c *CacheExt) SetMany(ctx context.Context, keyValues map[string]interface{}, ttl time.Duration) error

SetMany

Example
package main

import (
	"context"
	"fmt"
	"time"

	"github.com/shanbay/gobay"
	"github.com/shanbay/gobay/extensions/cachext"

	_ "github.com/shanbay/gobay/extensions/cachext/backend/memory"
)

func main() {
	cache := &cachext.CacheExt{NS: "cache_"}
	exts := map[gobay.Key]gobay.Extension{
		"cache": cache,
	}
	if _, err := gobay.CreateApp("../../testdata/", "testing", exts); err != nil {
		fmt.Println(err)
		return
	}
	// SetMany GetMany
	many_map := make(map[string]interface{})
	many_map["1"] = "hello"
	many_map["2"] = []bool{true, true}
	err := cache.SetMany(context.Background(), many_map, 10*time.Second)
	fmt.Println(err)

	many_res := make(map[string]interface{})
	// 填上零值
	var str1 string
	val2 := []bool{}
	many_res["1"] = &str1
	many_res["2"] = &val2
	err = cache.GetMany(context.Background(), many_res)
	fmt.Println(err, *(many_res["1"].(*string)), *(many_res["2"].(*[]bool)))
}
Output:

<nil>
<nil> hello [true true]

func (*CacheExt) TTL

func (c *CacheExt) TTL(ctx context.Context, key string) time.Duration

TTL

type CachedConfig

type CachedConfig struct {
	// contains filtered or unexported fields
}

CachedConfig save the param and config for a cached func

func (*CachedConfig) GetResult

func (c *CachedConfig) GetResult(ctx context.Context, out interface{}, strArgs []string, intArgs []int64) error

GetResult

func (*CachedConfig) MakeCacheKey

func (c *CachedConfig) MakeCacheKey(strArgs []string, intArgs []int64) string

MakeCacheKey return the cache key of a function cache

Directories

Path Synopsis
backend

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL