1 package key_value_cache
6 "github.com/sjmudd/pstop/lib"
9 // provide a mapping from filename to table.schema etc
10 type KeyValueCache struct {
11 cache map[string]string
12 read_requests, served_from_cache, write_requests int
15 // create a new KeyValueCache entry
16 func NewKeyValueCache() KeyValueCache {
17 lib.Logger.Println("KeyValueCache()")
23 // return value if found
24 func (kvc *KeyValueCache) Get(key string) (result string, err error) {
25 lib.Logger.Println("KeyValueCache.Get(", key, ")")
27 lib.Logger.Println("KeyValueCache.Get() kvc.cache is empty so enabling it")
28 kvc.cache = make(map[string]string)
30 kvc.served_from_cache = 0
31 kvc.write_requests = 0
36 if result, ok := kvc.cache[key]; ok {
37 kvc.served_from_cache++
38 lib.Logger.Println("Found: read_requests/servced_from_cache:", kvc.read_requests, kvc.served_from_cache)
41 lib.Logger.Println("Not found: read_requests/served_from_cache:", kvc.read_requests, kvc.served_from_cache)
42 return "", errors.New("Not found")
46 // write to cache and return value
47 func (kvc *KeyValueCache) Put(key, value string) string {
48 lib.Logger.Println("KeyValueCache.Put(", key, ",", value, ")")
49 kvc.cache[key] = value
53 func (kvc *KeyValueCache) Statistics() (int, int, int) {
54 return kvc.read_requests, kvc.served_from_cache, kvc.write_requests