| // Package leveldbcache provides an implementation of httpcache.Cache that |
| // uses github.com/syndtr/goleveldb/leveldb |
| package leveldbcache |
| |
| import ( |
| "github.com/syndtr/goleveldb/leveldb" |
| ) |
| |
| // Cache is an implementation of httpcache.Cache with leveldb storage |
| type Cache struct { |
| db *leveldb.DB |
| } |
| |
| // Get returns the response corresponding to key if present |
| func (c *Cache) Get(key string) (resp []byte, ok bool) { |
| var err error |
| resp, err = c.db.Get([]byte(key), nil) |
| if err != nil { |
| return []byte{}, false |
| } |
| return resp, true |
| } |
| |
| // Set saves a response to the cache as key |
| func (c *Cache) Set(key string, resp []byte) { |
| c.db.Put([]byte(key), resp, nil) |
| } |
| |
| // Delete removes the response with key from the cache |
| func (c *Cache) Delete(key string) { |
| c.db.Delete([]byte(key), nil) |
| } |
| |
| // New returns a new Cache that will store leveldb in path |
| func New(path string) (*Cache, error) { |
| cache := &Cache{} |
| |
| var err error |
| cache.db, err = leveldb.OpenFile(path, nil) |
| |
| if err != nil { |
| return nil, err |
| } |
| return cache, nil |
| } |
| |
| // NewWithDB returns a new Cache using the provided leveldb as underlying |
| // storage. |
| func NewWithDB(db *leveldb.DB) *Cache { |
| return &Cache{db} |
| } |