123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- // Copyright 2014 beego Author. All Rights Reserved.
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
- // Package cache provide a Cache interface and some implemetn engine
- // Usage:
- //
- // import(
- // "github.com/astaxie/beego/cache"
- // )
- //
- // bm, err := cache.NewCache("memory", `{"interval":60}`)
- //
- // Use it like this:
- //
- // bm.Put("astaxie", 1, 10 * time.Second)
- // bm.Get("astaxie")
- // bm.IsExist("astaxie")
- // bm.Delete("astaxie")
- //
- // more docs http://beego.me/docs/module/cache.md
- package cache
- import (
- "fmt"
- "time"
- )
- // Cache interface contains all behaviors for cache adapter.
- // usage:
- // cache.Register("file",cache.NewFileCache) // this operation is run in init method of file.go.
- // c,err := cache.NewCache("file","{....}")
- // c.Put("key",value, 3600 * time.Second)
- // v := c.Get("key")
- //
- // c.Incr("counter") // now is 1
- // c.Incr("counter") // now is 2
- // count := c.Get("counter").(int)
- type Cache interface {
- // get cached value by key.
- Get(key string) interface{}
- // GetMulti is a batch version of Get.
- GetMulti(keys []string) []interface{}
- // set cached value with key and expire time.
- Put(key string, val interface{}, timeout time.Duration) error
- // delete cached value by key.
- Delete(key string) error
- // increase cached int value by key, as a counter.
- Incr(key string) error
- // decrease cached int value by key, as a counter.
- Decr(key string) error
- // check if cached value exists or not.
- IsExist(key string) bool
- // clear all cache.
- ClearAll() error
- // start gc routine based on config string settings.
- StartAndGC(config string) error
- }
- // Instance is a function create a new Cache Instance
- type Instance func() Cache
- var adapters = make(map[string]Instance)
- // Register makes a cache adapter available by the adapter name.
- // If Register is called twice with the same name or if driver is nil,
- // it panics.
- func Register(name string, adapter Instance) {
- if adapter == nil {
- panic("cache: Register adapter is nil")
- }
- if _, ok := adapters[name]; ok {
- panic("cache: Register called twice for adapter " + name)
- }
- adapters[name] = adapter
- }
- // NewCache Create a new cache driver by adapter name and config string.
- // config need to be correct JSON as string: {"interval":360}.
- // it will start gc automatically.
- func NewCache(adapterName, config string) (adapter Cache, err error) {
- instanceFunc, ok := adapters[adapterName]
- if !ok {
- err = fmt.Errorf("cache: unknown adapter name %q (forgot to import?)", adapterName)
- return
- }
- adapter = instanceFunc()
- err = adapter.StartAndGC(config)
- if err != nil {
- adapter = nil
- }
- return
- }
|