mirror of
https://github.com/willnorris/imageproxy.git
synced 2026-05-23 02:45:13 +02:00
add basic caching support
includes two implementations, a no-op NopCache and an in-memory MemoryCache.
This commit is contained in:
parent
a8fb3012bd
commit
95fdd8b79f
6 changed files with 167 additions and 12 deletions
17
cache/cache.go
vendored
Normal file
17
cache/cache.go
vendored
Normal 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
27
cache/memory.go
vendored
Normal 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
12
cache/nop.go
vendored
Normal 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) {}
|
||||
Loading…
Add table
Add a link
Reference in a new issue