move out cache implementations
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
This commit is contained in:
		
							
								
								
									
										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 | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user