storage/memcache.go

59 lines
1.0 KiB
Go

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()
}