3

GitHub - Code-Hex/go-generics-cache at v1.3.0

 1 year ago
source link: https://github.com/Code-Hex/go-generics-cache/tree/v1.3.0
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

go-generics-cache

go-generics-cache is an in-memory key:value store/cache that is suitable for applications running on a single machine. This in-memory cache uses Go Generics which is introduced in 1.18.

  • a thread-safe
  • implemented with Go Generics
  • TTL supported (with expiration times)
  • Simple cache is like map[string]interface{}
  • Cache replacement policies
    • Least recently used (LRU)
      • Discards the least recently used items first.
      • See examples
    • Least-frequently used (LFU)
    • First in first out (FIFO)
      • Using this algorithm the cache behaves in the same way as a FIFO queue.
      • The cache evicts the blocks in the order they were added, without any regard to how often or how many times they were accessed before.
      • See examples
    • Most recently used (MRU)
      • In contrast to Least Recently Used (LRU), MRU discards the most recently used items first.
      • See examples
    • Clock
      • Clock is a more efficient version of FIFO than Second-chance cache algorithm.
      • See examples

Requirements

Go 1.18 or later.

Install

$ go get github.com/Code-Hex/go-generics-cache

Usage

See also examples or go playground

package main

import (
	"context"
	"fmt"
	"time"

	cache "github.com/Code-Hex/go-generics-cache"
)

func main() {
	ctx, cancel := context.WithCancel(context.Background())
	defer cancel()

	// use simple cache algorithm without options.
	c := cache.NewContext[string, int](ctx)
	c.Set("a", 1)
	gota, aok := c.Get("a")
	gotb, bok := c.Get("b")
	fmt.Println(gota, aok) // 1 true
	fmt.Println(gotb, bok) // 0 false

	// Create a cache for Number constraint. key as string, value as int.
	nc := cache.NewNumber[string, int]()
	nc.Set("age", 26, cache.WithExpiration(time.Hour))

	incremented := nc.Increment("age", 1)
	fmt.Println(incremented) // 27

	decremented := nc.Decrement("age", 1)
	fmt.Println(decremented) // 26
}

Articles


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK