move out cache implementations
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
This commit is contained in:
parent
112f21006c
commit
c9b283be60
80
cache/memcache/memcache.go
vendored
80
cache/memcache/memcache.go
vendored
@ -1,80 +0,0 @@
|
|||||||
// Package memcache is a memcache implementation of the Cache
|
|
||||||
package memcache
|
|
||||||
|
|
||||||
import (
|
|
||||||
"encoding/json"
|
|
||||||
|
|
||||||
"github.com/bradfitz/gomemcache/memcache"
|
|
||||||
"github.com/unistack-org/micro/v3/cache"
|
|
||||||
)
|
|
||||||
|
|
||||||
type memcacheCache struct {
|
|
||||||
options cache.Options
|
|
||||||
client *memcache.Client
|
|
||||||
}
|
|
||||||
|
|
||||||
type memcacheItem struct {
|
|
||||||
Key string
|
|
||||||
Value interface{}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *memcacheCache) Init(opts ...cache.Option) error {
|
|
||||||
for _, o := range opts {
|
|
||||||
o(&m.options)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *memcacheCache) Get(key string) (interface{}, error) {
|
|
||||||
item, err := m.client.Get(key)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
var mc *memcacheItem
|
|
||||||
|
|
||||||
if err := json.Unmarshal(item.Value, &mc); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return mc.Value, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *memcacheCache) Set(key string, val interface{}) error {
|
|
||||||
b, err := json.Marshal(val)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return m.client.Set(&memcache.Item{
|
|
||||||
Key: key,
|
|
||||||
Value: b,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *memcacheCache) Delete(key string) error {
|
|
||||||
return m.client.Delete(key)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *memcacheCache) String() string {
|
|
||||||
return "memcache"
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewCache returns a new memcache Cache
|
|
||||||
func NewCache(opts ...cache.Option) cache.Cache {
|
|
||||||
var options cache.Options
|
|
||||||
for _, o := range opts {
|
|
||||||
o(&options)
|
|
||||||
}
|
|
||||||
|
|
||||||
// get and set the nodes
|
|
||||||
nodes := options.Nodes
|
|
||||||
if len(nodes) == 0 {
|
|
||||||
nodes = []string{"localhost:11211"}
|
|
||||||
}
|
|
||||||
|
|
||||||
return &memcacheCache{
|
|
||||||
options: options,
|
|
||||||
client: memcache.New(nodes...),
|
|
||||||
}
|
|
||||||
}
|
|
56
cache/memory/memory.go
vendored
56
cache/memory/memory.go
vendored
@ -1,56 +0,0 @@
|
|||||||
// Package memory is an in memory cache
|
|
||||||
package memory
|
|
||||||
|
|
||||||
import (
|
|
||||||
"sync"
|
|
||||||
|
|
||||||
"github.com/unistack-org/micro/v3/cache"
|
|
||||||
"github.com/unistack-org/micro/v3/errors"
|
|
||||||
)
|
|
||||||
|
|
||||||
type memoryCache struct {
|
|
||||||
// TODO: use a decent caching library
|
|
||||||
sync.RWMutex
|
|
||||||
values map[string]interface{}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *memoryCache) Init(opts ...cache.Option) error {
|
|
||||||
// TODO: implement
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *memoryCache) Get(key string) (interface{}, error) {
|
|
||||||
m.RLock()
|
|
||||||
defer m.RUnlock()
|
|
||||||
|
|
||||||
v, ok := m.values[key]
|
|
||||||
if !ok {
|
|
||||||
return nil, errors.NotFound("go.micro.cache", key+" not found")
|
|
||||||
}
|
|
||||||
|
|
||||||
return v, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *memoryCache) Set(key string, val interface{}) error {
|
|
||||||
m.Lock()
|
|
||||||
m.values[key] = val
|
|
||||||
m.Unlock()
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *memoryCache) Delete(key string) error {
|
|
||||||
m.Lock()
|
|
||||||
delete(m.values, key)
|
|
||||||
m.Unlock()
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *memoryCache) String() string {
|
|
||||||
return "memory"
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewCache(opts ...cache.Option) cache.Cache {
|
|
||||||
return &memoryCache{
|
|
||||||
values: make(map[string]interface{}),
|
|
||||||
}
|
|
||||||
}
|
|
1
go.mod
1
go.mod
@ -4,7 +4,6 @@ go 1.15
|
|||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/BurntSushi/toml v0.3.1
|
github.com/BurntSushi/toml v0.3.1
|
||||||
github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b
|
|
||||||
github.com/caddyserver/certmagic v0.10.6
|
github.com/caddyserver/certmagic v0.10.6
|
||||||
github.com/cpuguy83/go-md2man/v2 v2.0.0 // indirect
|
github.com/cpuguy83/go-md2man/v2 v2.0.0 // indirect
|
||||||
github.com/dgrijalva/jwt-go v3.2.0+incompatible
|
github.com/dgrijalva/jwt-go v3.2.0+incompatible
|
||||||
|
Loading…
Reference in New Issue
Block a user