add basic caching support

includes two implementations, a no-op NopCache and an in-memory
MemoryCache.
This commit is contained in:
Will Norris 2013-12-04 02:55:56 -08:00
parent a8fb3012bd
commit 95fdd8b79f
6 changed files with 167 additions and 12 deletions

17
cache/cache.go vendored Normal file
View file

@ -0,0 +1,17 @@
// Package cache implements a image cache.
package cache
import "github.com/willnorris/go-imageproxy/data"
// Cache provides a cache for image metadata and transformed variants of the
// image.
type Cache interface {
// Get retrieves the cached Image for the provided image URL.
Get(string) (image *data.Image, ok bool)
// Put caches the provided Image.
Save(*data.Image)
// Delete deletes the cached Image and all variants for the image at the specified URL.
Delete(string)
}

27
cache/memory.go vendored Normal file
View file

@ -0,0 +1,27 @@
package cache
import "github.com/willnorris/go-imageproxy/data"
// MemoryCache provides an in-memory Cache implementation.
type MemoryCache struct {
images map[string]*data.Image
}
func NewMemoryCache() *MemoryCache {
return &MemoryCache{
make(map[string]*data.Image),
}
}
func (c MemoryCache) Get(u string) (*data.Image, bool) {
image, ok := c.images[u]
return image, ok
}
func (c MemoryCache) Save(image *data.Image) {
c.images[image.URL] = image
}
func (c MemoryCache) Delete(u string) {
delete(c.images, u)
}

12
cache/nop.go vendored Normal file
View file

@ -0,0 +1,12 @@
package cache
import "github.com/willnorris/go-imageproxy/data"
// NopCache provides a no-op cache implementation that doesn't actually cache anything.
var NopCache = new(nopCache)
type nopCache struct{}
func (c nopCache) Get(u string) (*data.Image, bool) { return nil, false }
func (c nopCache) Save(image *data.Image) {}
func (c nopCache) Delete(u string) {}