README ¶
Cachego
Simple interface for caching
Installation
Cachego requires Go 1.9 or later.
go get github.com/faabiosr/cachego
If you want to get an specific version, please use the example below:
go get gopkg.in/faabiosr/cachego.v0
Usage Examples
Memcached
package main
import (
"github.com/faabiosr/cachego"
"github.com/bradfitz/gomemcache/memcache"
)
var cache cachego.Cache
func init() {
cache = cachego.NewMemcached(memcached.New("localhost:11211"))
}
Redis
package main
import (
"github.com/faabiosr/cachego"
"gopkg.in/redis.v4"
)
var cache cachego.Cache
func init() {
cache = cachego.NewRedis(
redis.NewClient(&redis.Options{
Addr: ":6379",
}),
)
}
File
package main
import (
"github.com/faabiosr/cachego"
)
var cache cachego.Cache
func init() {
cache = cachego.NewFile(
"/cache-dir/",
)
}
Map
package main
import (
"github.com/faabiosr/cachego"
)
var cache cachego.Cache
func init() {
cache = NewMap()
}
MongoDB
package main
import (
"github.com/faabiosr/cachego"
"gopkg.in/mgo.v2"
)
var cache cachego.Cache
func init() {
session, _ := mgo.Dial(address)
cache = cachego.NewMongo(
session.DB("cache").C("cache"),
)
}
Sqlite3
package main
import (
"database/sql"
_ "github.com/mattn/go-sqlite3"
)
var cache cachego.Cache
func init() {
db, _ := sql.Open("sqlite3", "./cache.db")
cache, _ = NewSqlite3(db, "cache")
}
SyncMap
package main
import (
"github.com/faabiosr/cachego"
)
var cache cachego.Cache
func init() {
cache = NewSyncMap()
}
BoltDB
package main
import (
"github.com/faabiosr/cachego"
bolt "github.com/coreos/bbolt"
)
var cache cachego.Cache
func init() {
db, _ := bolt.Open("cache.db", 0600, nil)
cache = NewBolt(db)
}
Chain
package main
import (
"github.com/faabiosr/cachego"
)
var cache cachego.Cache
func init() {
memcached := cachego.NewMemcached(
memcached.New("localhost:11211"),
)
redis := cachego.NewRedis(
redis.NewClient(&redis.Options{
Addr: ":6379",
}),
)
file := cachego.NewFile(
"/cache-dir/"
)
cache = cachego.NewChain(
cachego.NewMap(),
memcached,
redis,
file,
)
}
Usage
package main
import (
"github.com/faabiosr/cachego"
"github.com/bradfitz/gomemcache/memcache"
)
func main() {
cache.Save("foo", "bar")
cache.Save("john", "doe")
value, err := cache.Fetch("foo")
multiple := cache.FetchMulti([]string{"foo", "john"})
if cache.Contains("foo") {
cache.Delete("foo")
}
cache.Flush()
}
Documentation
Read the full documentation at https://godoc.org/github.com/faabiosr/cachego.
Development
Requirements
- Install docker and docker-compose
- Install go dep
Makefile
// Clean up
$ make clean
//Run tests and generates html coverage file
make cover
// Up the docker containers for testing
make docker
// Format all go files
make fmt
//Run linters
make lint
// Run tests
make test
License
This project is released under the MIT licence. See LICENSE for more details.
Documentation ¶
Overview ¶
Package cachego provides a simple way to use cache drivers.
Example Usage ¶
The following is a simple example using memcached driver:
import ( "fmt" "github.com/faabiosr/cachego" "github.com/bradfitz/gomemcache/memcache" ) func main() { cache := cachego.NewMemcached( memcached.New("localhost:11211"), ) cache.Save("foo", "bar") fmt.Println(cache.Fetch("foo")) }
Index ¶
- Constants
- func Wrap(err, additionalErr error) error
- type Bolt
- type BoltContent
- type Cache
- func NewBolt(db *bolt.DB) Cache
- func NewChain(drivers ...Cache) Cache
- func NewFile(dir string) Cache
- func NewMap() Cache
- func NewMemcached(driver *memcache.Client) Cache
- func NewMongo(collection *mgo.Collection) Cache
- func NewRedis(driver redis.BaseCmdable) Cache
- func NewSqlite3(db *sql.DB, table string) (Cache, error)
- func NewSyncMap() Cache
- type Chain
- type File
- type FileContent
- type Map
- type MapItem
- type Memcached
- func (m *Memcached) Contains(key string) bool
- func (m *Memcached) Delete(key string) error
- func (m *Memcached) Fetch(key string) (string, error)
- func (m *Memcached) FetchMulti(keys []string) map[string]string
- func (m *Memcached) Flush() error
- func (m *Memcached) Save(key string, value string, lifeTime time.Duration) error
- type Mongo
- type MongoContent
- type Redis
- type Sqlite3
- func (s *Sqlite3) Contains(key string) bool
- func (s *Sqlite3) Delete(key string) error
- func (s *Sqlite3) Fetch(key string) (string, error)
- func (s *Sqlite3) FetchMulti(keys []string) map[string]string
- func (s *Sqlite3) Flush() error
- func (s *Sqlite3) Save(key string, value string, lifeTime time.Duration) error
- type SyncMap
- func (sm *SyncMap) Contains(key string) bool
- func (sm *SyncMap) Delete(key string) error
- func (sm *SyncMap) Fetch(key string) (string, error)
- func (sm *SyncMap) FetchMulti(keys []string) map[string]string
- func (sm *SyncMap) Flush() error
- func (sm *SyncMap) Save(key string, value string, lifeTime time.Duration) error
- type SyncMapItem
Constants ¶
const ( // ErrCacheExpired returns an error when the cache key was expired. ErrCacheExpired = err("cache expired") // ErrFlush returns an error when flush fails. ErrFlush = err("unable to flush") // ErrSave returns an error when save fails. ErrSave = err("unable to save") // ErrDelete returns an error when deletion fails. ErrDelete = err("unable to delete") // ErrDecode returns an errors when decode fails. ErrDecode = err("unable to decode") )
const ErrBoltBucketNotFound = err("Bucket not found")
ErrBoltBucketNotFound returns an error when bucket not found
const ErrFileOpen = err("unable to open file")
ErrFileOpen returns an error when try to open a file.
const ErrMapKeyNotFound = err("key not found")
ErrMapNotFound returns an error when the key is not found.
const ErrSyncMapKeyNotFound = err("key not found")
ErrSyncMapNotFound returns an error when the key is not found.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type Bolt ¶
type Bolt struct {
// contains filtered or unexported fields
}
Bolt store for caching data
func (*Bolt) FetchMulti ¶
FetchMulti retrieve multiple cached values from keys of the BoltDB storage
type BoltContent ¶
BoltContent it's a structure of cached value
type Cache ¶
type Cache interface { // Contains check if a cached key exists Contains(key string) bool // Delete remove the cached key Delete(key string) error // Fetch retrieve the cached key value Fetch(key string) (string, error) // FetchMulti retrieve multiple cached keys value FetchMulti(keys []string) map[string]string // Flush remove all cached keys Flush() error // Save cache a value by key Save(key string, value string, lifeTime time.Duration) error }
Cache is the top-level cache interface
func NewMemcached ¶
NewMemcached creates an instance of Memcached cache driver
func NewMongo ¶
func NewMongo(collection *mgo.Collection) Cache
NewMongo creates an instance of Mongo cache driver
func NewRedis ¶
func NewRedis(driver redis.BaseCmdable) Cache
NewRedis creates an instance of Redis cache driver
func NewSqlite3 ¶
NewSqlite3 creates an instance of Sqlite3 cache driver
type Chain ¶
type Chain struct {
// contains filtered or unexported fields
}
Chain storage for dealing with multiple cache storage in the same time
func (*Chain) FetchMulti ¶
FetchMulti retrieves multiple cached values from one of the registred cache storages
type File ¶
type File struct {
// contains filtered or unexported fields
}
File store for caching data
func (*File) FetchMulti ¶
FetchMulti retrieve multiple cached values from keys of the File storage
type FileContent ¶
FileContent it's a structure of cached value
type Map ¶
type Map struct {
// contains filtered or unexported fields
}
Map store the data in memory without external server
func (*Map) FetchMulti ¶
FetchMulti retrieves multiple cached value from keys of the Map storage
type MapItem ¶
type MapItem struct {
// contains filtered or unexported fields
}
MapItem structure for managing data and lifetime
type Memcached ¶
type Memcached struct {
// contains filtered or unexported fields
}
Memcached it's a wrap around the memcached driver
func (*Memcached) FetchMulti ¶
FetchMulti retrieves multiple cached value from keys of the Memcached storage
type Mongo ¶
type Mongo struct {
// contains filtered or unexported fields
}
Mongo it's a wrap around the mgo driver
func (*Mongo) FetchMulti ¶
FetchMulti retrieves multiple cached value from keys of the Mongo storage
type MongoContent ¶
MongoContent it's a bson structure of cached value
type Redis ¶
type Redis struct {
// contains filtered or unexported fields
}
Redis it's a wrap around the redis driver
func (*Redis) FetchMulti ¶
FetchMulti retrieves multiple cached value from keys of the Redis storage
type Sqlite3 ¶
type Sqlite3 struct {
// contains filtered or unexported fields
}
Sqlite3 it's a wrap around the sqlite3 driver
func (*Sqlite3) FetchMulti ¶
FetchMulti retrieves multiple cached value from keys of the Sqlite3 storage
type SyncMap ¶
type SyncMap struct {
// contains filtered or unexported fields
}
SyncMap store the data in memory without external server
func (*SyncMap) FetchMulti ¶
FetchMulti retrieves multiple cached value from keys of the SyncMap storage
type SyncMapItem ¶
type SyncMapItem struct {
// contains filtered or unexported fields
}
SyncMapItem structure for managing data and lifetime