| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- // +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}
- }
|