Transparent cache and distributed commit to key-value store written in Go.
go get github.com/juntaki/transparent
First, create layers and stack them with Stack.Stack(). This example adds LRU memory cache and filesystem cache to dummy source layer.
cacheLayer1, _ := lru.NewCache(10, 100)
cacheLayer2 := filesystem.NewCache(10, "/tmp")
sourceLayer := test.NewSource(10)
stack := transparent.NewStack()
stack.Stack(sourceLayer)
stack.Stack(cacheLayer2)
stack.Stack(cacheLayer1)
If you manipulate the Stack, the value will be transmitted from top layer to the bottom layer transparently.
stack.Set("key", []byte("value"))
stack.Sync()
// value, _ = cacheLayer1.Get("key") // "value"
// value, _ = cacheLayer2.Get("key") // "value"
// value, _ = sourceLayer.Get("key") // "value"
value, _ := stack.Get("key")
fmt.Printf("%s\n", value) // "value"
For details, please refer to [Godoc] (https://godoc.org/github.com/juntaki/transparent).