// Package redis provides a redis interface for http caching. package redis import ( "github.com/garyburd/redigo/redis" "github.com/gregjones/httpcache" ) // cache is an implementation of httpcache.Cache that caches responses in a // redis server. type cache struct { redis.Conn } // cacheKey modifies an httpcache key for use in redis. Specifically, it // prefixes keys to avoid collision with other data stored in redis. func cacheKey(key string) string { return "rediscache:" + key } // Get returns the response corresponding to key if present. func (c cache) Get(key string) (resp []byte, ok bool) { item, err := redis.Bytes(c.Do("GET", cacheKey(key))) if err != nil { return nil, false } return item, true } // Set saves a response to the cache as key. func (c cache) Set(key string, resp []byte) { c.Do("SET", cacheKey(key), resp) } // Delete removes the response with key from the cache. func (c cache) Delete(key string) { c.Do("DEL", cacheKey(key)) } // NewWithClient returns a new Cache with the given redis connection. func NewWithClient(client redis.Conn) httpcache.Cache { return cache{client} }