gotcha

package module
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 8, 2024 License: MIT Imports: 6 Imported by: 4

README

[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 Go Go.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"
)

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)

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	// DefaultCache use for default cache client
	DefaultCache = New()
)

Functions

func ClearCache

func ClearCache() (err error)

ClearCache will Clear the cache using default option

func Delete

func Delete(key string) (err error)

Delete will delete an item from the cache using default option

func Get

func Get(key string) (value interface{}, err error)

Get will get an item from cache using default option

func GetKeys

func GetKeys() (keys []string, err error)

GetKeys will get all keys from the cache using default option

func New

func New(options ...*cache.Option) (c cache.Cache)

New will create a new cache client. If the options not set, the cache will use the default options

func NewOption

func NewOption() (op *cache.Option)

NewOption return an empty option

func NewRepository

func NewRepository(option cache.Option) internal.Repository

NewRepository return the implementations of repository cache

func Set

func Set(key string, value interface{}) (err error)

Set will set an item to cache using default option

func Version

func Version() string

Version is the current release version.

Types

type Cache

type Cache struct {
	// contains filtered or unexported fields
}

Cache represent the Cache handler

func (*Cache) ClearCache

func (c *Cache) ClearCache() (err error)

ClearCache will cleanup all the cache TODO: (bxcodec) Add Test for this function

func (*Cache) Delete

func (c *Cache) Delete(key string) (err error)

Delete will remove the item from cache TODO: (bxcodec) Add Test for this function

func (*Cache) Get

func (c *Cache) Get(key string) (value interface{}, err error)

Get will retrieve the item from cache TODO: (bxcodec) Add Test for this function

func (*Cache) GetKeys

func (c *Cache) GetKeys() (keys []string, err error)

GetKeys will retrieve all keys from cache TODO: (bxcodec) Add Test for this function

func (*Cache) Set

func (c *Cache) Set(key string, value interface{}) (err error)

Set used for setting the item to cache TODO: (bxcodec) Add Test for this function

Directories

Path Synopsis
examples
basic Module
lfu
lru

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL