First
This commit is contained in:
14
store/consul_item.go
Normal file
14
store/consul_item.go
Normal file
@@ -0,0 +1,14 @@
|
||||
package store
|
||||
|
||||
type ConsulItem struct {
|
||||
key string
|
||||
value []byte
|
||||
}
|
||||
|
||||
func (c *ConsulItem) Key() string {
|
||||
return c.key
|
||||
}
|
||||
|
||||
func (c *ConsulItem) Value() []byte {
|
||||
return c.value
|
||||
}
|
||||
55
store/consul_store.go
Normal file
55
store/consul_store.go
Normal file
@@ -0,0 +1,55 @@
|
||||
package store
|
||||
|
||||
import (
|
||||
"errors"
|
||||
|
||||
consul "github.com/armon/consul-api"
|
||||
)
|
||||
|
||||
type ConsulStore struct {
|
||||
Client *consul.Client
|
||||
}
|
||||
|
||||
func (c *ConsulStore) Get(key string) (Item, error) {
|
||||
kv, _, err := c.Client.KV().Get(key, nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if kv == nil {
|
||||
return nil, errors.New("key not found")
|
||||
}
|
||||
|
||||
return &ConsulItem{
|
||||
key: kv.Key,
|
||||
value: kv.Value,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (c *ConsulStore) Del(key string) error {
|
||||
_, err := c.Client.KV().Delete(key, nil)
|
||||
return err
|
||||
}
|
||||
|
||||
func (c *ConsulStore) Put(item Item) error {
|
||||
_, err := c.Client.KV().Put(&consul.KVPair{
|
||||
Key: item.Key(),
|
||||
Value: item.Value(),
|
||||
}, nil)
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
func (c *ConsulStore) NewItem(key string, value []byte) Item {
|
||||
return &ConsulItem{
|
||||
key: key,
|
||||
value: value,
|
||||
}
|
||||
}
|
||||
|
||||
func NewConsulStore() Store {
|
||||
client, _ := consul.NewClient(&consul.Config{})
|
||||
|
||||
return &ConsulStore{
|
||||
Client: client,
|
||||
}
|
||||
}
|
||||
6
store/item.go
Normal file
6
store/item.go
Normal file
@@ -0,0 +1,6 @@
|
||||
package store
|
||||
|
||||
type Item interface {
|
||||
Key() string
|
||||
Value() []byte
|
||||
}
|
||||
14
store/memcached_item.go
Normal file
14
store/memcached_item.go
Normal file
@@ -0,0 +1,14 @@
|
||||
package store
|
||||
|
||||
type MemcacheItem struct {
|
||||
key string
|
||||
value []byte
|
||||
}
|
||||
|
||||
func (m *MemcacheItem) Key() string {
|
||||
return m.key
|
||||
}
|
||||
|
||||
func (m *MemcacheItem) Value() []byte {
|
||||
return m.value
|
||||
}
|
||||
65
store/memcached_store.go
Normal file
65
store/memcached_store.go
Normal file
@@ -0,0 +1,65 @@
|
||||
package store
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"os"
|
||||
|
||||
mc "github.com/bradfitz/gomemcache/memcache"
|
||||
)
|
||||
|
||||
type MemcacheStore struct {
|
||||
Client *mc.Client
|
||||
}
|
||||
|
||||
func (m *MemcacheStore) Get(key string) (Item, error) {
|
||||
kv, err := m.Client.Get(key)
|
||||
if err != nil && err == mc.ErrCacheMiss {
|
||||
return nil, errors.New("key not found")
|
||||
} else if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if kv == nil {
|
||||
return nil, errors.New("key not found")
|
||||
}
|
||||
|
||||
return &MemcacheItem{
|
||||
key: kv.Key,
|
||||
value: kv.Value,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (m *MemcacheStore) Del(key string) error {
|
||||
return m.Client.Delete(key)
|
||||
}
|
||||
|
||||
func (m *MemcacheStore) Put(item Item) error {
|
||||
return m.Client.Set(&mc.Item{
|
||||
Key: item.Key(),
|
||||
Value: item.Value(),
|
||||
})
|
||||
}
|
||||
|
||||
func (m *MemcacheStore) NewItem(key string, value []byte) Item {
|
||||
return &MemcacheItem{
|
||||
key: key,
|
||||
value: value,
|
||||
}
|
||||
}
|
||||
|
||||
func NewMemcacheStore() Store {
|
||||
server := os.Getenv("MEMCACHED_SERVICE_HOST")
|
||||
port := os.Getenv("MEMCACHED_SERVICE_PORT")
|
||||
|
||||
if len(server) == 0 {
|
||||
server = "127.0.0.1"
|
||||
}
|
||||
|
||||
if len(port) == 0 {
|
||||
port = "11211"
|
||||
}
|
||||
|
||||
return &MemcacheStore{
|
||||
Client: mc.New(server + ":" + port),
|
||||
}
|
||||
}
|
||||
28
store/store.go
Normal file
28
store/store.go
Normal file
@@ -0,0 +1,28 @@
|
||||
package store
|
||||
|
||||
type Store interface {
|
||||
Get(string) (Item, error)
|
||||
Del(string) error
|
||||
Put(Item) error
|
||||
NewItem(string, []byte) Item
|
||||
}
|
||||
|
||||
var (
|
||||
DefaultStore = NewConsulStore()
|
||||
)
|
||||
|
||||
func Get(key string) (Item, error) {
|
||||
return DefaultStore.Get(key)
|
||||
}
|
||||
|
||||
func Del(key string) error {
|
||||
return DefaultStore.Del(key)
|
||||
}
|
||||
|
||||
func Put(item Item) error {
|
||||
return DefaultStore.Put(item)
|
||||
}
|
||||
|
||||
func NewItem(key string, value []byte) Item {
|
||||
return DefaultStore.NewItem(key, value)
|
||||
}
|
||||
Reference in New Issue
Block a user