Skip to content
This repository was archived by the owner on Mar 8, 2024. It is now read-only.

Repository files navigation

[DEPRECATED] gotcha

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 GoGo.Dev

Index

Support

You can file an Issue. See documentation in Godoc

Getting Started

Download

go get -u github.com/bxcodec/gotcha

Example

With Cache Client

package main
import (
"fmt""log""github.com/bxcodec/gotcha"
)
funcmain() {
cache:=gotcha.New()
err:=cache.Set("name", "John Snow")
iferr!=nil {
log.Fatal(err)
}
val, err:=cache.Get("name")
iferr!=nil {
log.Fatal(err)
}
fmt.Println(val)
}

Without Cache Client

package main
import (
"fmt""log""github.com/bxcodec/gotcha"
)
funcmain() {
err:=gotcha.Set("name", "John Snow")
iferr!=nil {
log.Fatal(err)
}
val, err:=gotcha.Get("name")
iferr!=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"
)
funcmain() {
cache:=gotcha.New(
gotcha.NewOption().SetAlgorithm(cache.LRUAlgorithm).
SetExpiryTime(time.Minute*10).SetMaxSizeItem(100),
)
err:=cache.Set("Kue", "Nama")
iferr!=nil {
log.Fatal(err)
}
val, err:=cache.Get("Kue")
iferr!=nil {
log.Fatal(err)
}
fmt.Println(val)
}

LFU

package main
import (
"fmt""log""time""github.com/bxcodec/gotcha""github.com/bxcodec/gotcha/cache"
)
funcmain() {
cache:=gotcha.New(
gotcha.NewOption().SetAlgorithm(cache.LFUAlgorithm).
SetExpiryTime(time.Minute*10).SetMaxSizeItem(100),
)
err:=cache.Set("Kue", "Nama")
iferr!=nil {
log.Fatal(err)
}
val, err:=cache.Get("Kue")
iferr!=nil {
log.Fatal(err)
}
fmt.Println(val)
}

Contribution

  • You can submit an issue or create a Pull Request (PR)

About

gotcha: inmemory-cache in Go (Golang) with customizable algorithm

Topics

Resources

Stars

21 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages