mirror of
https://github.com/ceph/ceph-csi.git
synced 2024-12-03 11:40:24 +00:00
61 lines
1.7 KiB
Go
61 lines
1.7 KiB
Go
// +build !appengine
|
|
|
|
// Package memcache provides an implementation of httpcache.Cache that uses
|
|
// gomemcache to store cached responses.
|
|
//
|
|
// When built for Google App Engine, this package will provide an
|
|
// implementation that uses App Engine's memcache service. See the
|
|
// appengine.go file in this package for details.
|
|
package memcache
|
|
|
|
import (
|
|
"github.com/bradfitz/gomemcache/memcache"
|
|
)
|
|
|
|
// Cache is an implementation of httpcache.Cache that caches responses in a
|
|
// memcache server.
|
|
type Cache struct {
|
|
*memcache.Client
|
|
}
|
|
|
|
// cacheKey modifies an httpcache key for use in memcache. Specifically, it
|
|
// prefixes keys to avoid collision with other data stored in memcache.
|
|
func cacheKey(key string) string {
|
|
return "httpcache:" + key
|
|
}
|
|
|
|
// Get returns the response corresponding to key if present.
|
|
func (c *Cache) Get(key string) (resp []byte, ok bool) {
|
|
item, err := c.Client.Get(cacheKey(key))
|
|
if err != nil {
|
|
return nil, false
|
|
}
|
|
return item.Value, true
|
|
}
|
|
|
|
// Set saves a response to the cache as key.
|
|
func (c *Cache) Set(key string, resp []byte) {
|
|
item := &memcache.Item{
|
|
Key: cacheKey(key),
|
|
Value: resp,
|
|
}
|
|
c.Client.Set(item)
|
|
}
|
|
|
|
// Delete removes the response with key from the cache.
|
|
func (c *Cache) Delete(key string) {
|
|
c.Client.Delete(cacheKey(key))
|
|
}
|
|
|
|
// New returns a new Cache using the provided memcache server(s) with equal
|
|
// weight. If a server is listed multiple times, it gets a proportional amount
|
|
// of weight.
|
|
func New(server ...string) *Cache {
|
|
return NewWithClient(memcache.New(server...))
|
|
}
|
|
|
|
// NewWithClient returns a new Cache with the given memcache client.
|
|
func NewWithClient(client *memcache.Client) *Cache {
|
|
return &Cache{client}
|
|
}
|