cache interface (#1805)

This commit is contained in:
Asim Aslam 2020-07-08 11:08:59 +01:00 committed by GitHub
parent 86f4235aaf
commit 00bd2bc65f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 73 additions and 0 deletions

17
cache/cache.go vendored Normal file
View File

@ -0,0 +1,17 @@
// Package cache is a caching interface
package cache
type Cache interface {
// Initialise options
Init(...Option) error
// Get a value
Get(key string) (interface{}, error)
// Set a value
Set(key string, val interface{}) error
// Delete a value
Delete(key string) error
// Name of the implementation
String() string
}
type Option struct{}

56
cache/memory/memory.go vendored Normal file
View File

@ -0,0 +1,56 @@
// Package memory is an in memory cache
package memory
import (
"sync"
"github.com/micro/go-micro/v2/cache"
"github.com/micro/go-micro/v2/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{}),
}
}