gotcha
gotcha: inmemory-cache in Go (Golang) with customizable algorithm
Index
Support
You can file an Issue. See documentation in Godoc
Getting Started
Download
go get -u github.com/bxcodec/gotchaExample
With Cache Client
package main
import (
"fmt"
"log"
"github.com/bxcodec/gotcha"
)
func main() {
cache := gotcha.New()
err := cache.Set("name", "John Snow")
if err != nil {
log.Fatal(err)
}
val, err := cache.Get("name")
if err != nil {
log.Fatal(err)
}
fmt.Println(val)
}Without Cache Client
package main
import (
"fmt"
"log"
"github.com/bxcodec/gotcha"
)
func main() {
err := gotcha.Set("name", "John Snow")
if err != nil {
log.Fatal(err)
}
val, err := gotcha.Get("name")
if err != nil {
log.Fatal(err)
}
fmt.Println(val)
}With Custom Cache ALgorithm
You can also custom and change the algorithm, expiry-time and also maximum memory.
gotcha.NewOption().SetAlgorithm(cache.LRUAlgorithm).
SetExpiryTime(time.Minute * 10).
SetMaxSizeItem(100).
SetMaxMemory(cache.MB * 10)Warn: Even gotcha support for MaxMemory, but the current version it's still using a simple json/encoding to count the byte size. So it will be slower if you set the MaxMemory.
Benchmark for LRU with/without MaxMemory
# With MaxMemory
20000000 7878 ns/op 1646 B/op 20 allocs/op
# Without MaxMemory
200000000 776 ns/op 150 B/op 6 allocs/op
If you seeking for fast performances and also your memory is high, ignore the MaxMemory options. I'm still looking for the better solutions for this problem. And if you have a better solutions, please kindly open and issue or submit a PR directly for the better results.
LRU
package main
import (
"fmt"
"log"
"time"
"github.com/bxcodec/gotcha"
"github.com/bxcodec/gotcha/cache"
)
func main() {
cache := gotcha.New(
gotcha.NewOption().SetAlgorithm(cache.LRUAlgorithm).
SetExpiryTime(time.Minute * 10).SetMaxSizeItem(100),
)
err := cache.Set("Kue", "Nama")
if err != nil {
log.Fatal(err)
}
val, err := cache.Get("Kue")
if err != nil {
log.Fatal(err)
}
fmt.Println(val)
}LFU
package main
import (
"fmt"
"log"
"time"
"github.com/bxcodec/gotcha"
"github.com/bxcodec/gotcha/cache"
)
func main() {
cache := gotcha.New(
gotcha.NewOption().SetAlgorithm(cache.LFUAlgorithm).
SetExpiryTime(time.Minute * 10).SetMaxSizeItem(100),
)
err := cache.Set("Kue", "Nama")
if err != nil {
log.Fatal(err)
}
val, err := cache.Get("Kue")
if err != nil {
log.Fatal(err)
}
fmt.Println(val)
}Contribution
- You can submit an issue or create a Pull Request (PR)

Formed in 2009, the Archive Team (not to be confused with the archive.org Archive-It Team) is a rogue archivist collective dedicated to saving copies of rapidly dying or deleted websites for the sake of history and digital heritage. The group is 100% composed of volunteers and interested parties, and has expanded into a large amount of related projects for saving online and digital history.
