From: Simon J Mudd Date: Tue, 25 Nov 2014 22:25:10 +0000 (+0100) Subject: Provide a simplistic key value cache to reduce regexp usage X-Git-Url: http://git.iain.cx/?a=commitdiff_plain;h=79dc9f00908f1bc9d46d5c5eeadada11a02b08d1;p=pstop.git Provide a simplistic key value cache to reduce regexp usage --- diff --git a/key_value_cache/key_value_cache.go b/key_value_cache/key_value_cache.go new file mode 100644 index 0000000..e5881b6 --- /dev/null +++ b/key_value_cache/key_value_cache.go @@ -0,0 +1,55 @@ +package key_value_cache + +import ( + "errors" + + "github.com/sjmudd/pstop/lib" +) + +// provide a mapping from filename to table.schema etc +type KeyValueCache struct { + cache map[string]string + read_requests, served_from_cache, write_requests int +} + +// create a new KeyValueCache entry +func NewKeyValueCache() KeyValueCache { + lib.Logger.Println("KeyValueCache()") + var kvc KeyValueCache + + return kvc +} + +// return value if found +func (kvc *KeyValueCache) Get(key string) (result string, err error) { + lib.Logger.Println("KeyValueCache.Get(", key, ")") + if kvc.cache == nil { + lib.Logger.Println("KeyValueCache.Get() kvc.cache is empty so enabling it") + kvc.cache = make(map[string]string) + kvc.read_requests = 0 + kvc.served_from_cache = 0 + kvc.write_requests = 0 + } + + kvc.read_requests++ + + if result, ok := kvc.cache[key]; ok { + kvc.served_from_cache++ + lib.Logger.Println("Found: read_requests/servced_from_cache:", kvc.read_requests, kvc.served_from_cache) + return result, nil + } else { + lib.Logger.Println("Not found: read_requests/served_from_cache:", kvc.read_requests, kvc.served_from_cache) + return "", errors.New("Not found") + } +} + +// write to cache and return value +func (kvc *KeyValueCache) Put(key, value string) string { + lib.Logger.Println("KeyValueCache.Put(", key, ",", value, ")") + kvc.cache[key] = value + return value +} + +func (kvc *KeyValueCache) Statistics() (int, int, int) { + return kvc.read_requests, kvc.served_from_cache, kvc.write_requests +}