package storage import ( "net" "github.com/bradfitz/gomemcache/memcache" ) type Memcache struct { db *memcache.Client } type netAddr struct { network string addr string } func (a *netAddr) Network() string { return a.network } func (a *netAddr) String() string { return a.addr } func NewMemcache(addr string, addrs ...string) (*Memcache, error) { ss := &memcache.ServerList{} if err := ss.SetServers(append(addrs, addr)...); err != nil { return nil, err } if err := ss.Each(func(addr net.Addr) error { conn, err := net.Dial("tcp", addr.String()) if err != nil { return err } return conn.Close() }); err != nil { return nil, err } db := memcache.NewFromSelector(ss) return &Memcache{db: db}, nil } func (mc *Memcache) Get(key string) ([]byte, error) { v, err := mc.db.Get(key) return v.Value, err } func (mc *Memcache) Set(key string, value []byte) error { return mc.db.Set(&memcache.Item{ Key: key, Value: value, }) } func (mc *Memcache) Close() error { return mc.db.FlushAll() }