Code-Hex
go-generics-cache
Go

A key:value store/cache library written in Go generics. LRU, LFU, FIFO, MRU, Clock support.

Last updated Jun 10, 2026
487
Stars
42
Forks
10
Issues
0
Stars/day
Attention Score
23
Language breakdown
No language data available.
Files click to expand
README

go-generics-cache

.github/workflows/test.yml codecov Go Reference

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{}
- See examples
  • Cache replacement policies
- Least recently used (LRU) - Discards the least recently used items first. - See examples - Least-frequently used (LFU) - Counts how often an item is needed. Those that are used least often are discarded first. - An O(1) algorithm for implementing the LFU cache eviction scheme - See examples - 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.NewContextstring, int 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

🔗 More in this category

© 2026 GitRepoTrend · Code-Hex/go-generics-cache · Updated daily from GitHub