Hi all, this library is no longer maintained. I don't see any usecase when to use this. Caching logic is a critical and complex problem. There are a lot of caching solutions that you can try, including this library. I find it hard to maintain this library since I don't use it extensively. Thanks for all the support and contributions so far. You can find me at https://imantumorang.com if you later need a similar library that we can collaborate on together.
gotcha: inmemory-cache in Go (Golang) with customizable algorithm
You can file an Issue. See documentation in Godoc
go get -u github.com/bxcodec/gotcha
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)
}
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)
}
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.
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)
}
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)
}
- You can submit an issue or create a Pull Request (PR)