Categorygithub.com/steamsets/go-cache
repositorypackage
0.3.4
Repository: https://github.com/steamsets/go-cache.git
Documentation: pkg.go.dev

# Packages

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author

# README

go-cache

Golang caching

This is a caching library heavily inspired by unkey-cache

It does not support all the features of unkey-cache yet.

  • Encryption Middleware
  • Tiered caching
  • Memory Store
  • Redis Store
  • Memcached Store
  • Libsql Store The following Table is needed:
CREATE TABLE cache
(
    key TEXT PRIMARY KEY,
    fresh_until INTEGER,
    stale_until INTEGER,
    value       TEXT
);

Todo:

  • [] Cloudflare Store
  • [] Cloudflare KV
  • [] Metric Middleware

Extra Features:

  • SwrMany
  • GetMany
  • SetMany

Notes

[!NOTE] This package is still in development and most likely not ready for production use yet. Please report any issues you find. Feature requests are also welcome.

Installation

go get github.com/steamsets/go-cache@latest

Usage

Please see example folder

Initialization

package somePackage
import (
	"github.com/steamsets/go-cache"
	memoryStore "github.com/steamsets/go-cache/store/memory"
	redisStore "github.com/steamsets/go-cache/store/redis"
)

type Cache struct {
	User cache.Namespace[User]
	Post cache.Namespace[Post]
}

type User struct {
	Name  string
	Email string
}

type Post struct {
	Title       string
	Description string
}

type Service struct {
	cache *Cache
}

var service *Service

func init() {
	memory := memoryStore.New(memoryStore.Config{
		UnstableEvictOnSet: &memoryStore.UnstableEvictOnSetConfig{
			Frequency: 1,
			MaxItems:  100,
		},
	})

	redis := redisStore.New(redisStore.Config{
		Host:     "localhost",
		Port:     6379,
		Username: "",
		Password: "",
		Database: 0,
	})

	c := Cache{
		User: cache.NewNamespace[User]("user", nil, cache.NamespaceConfig{
			Stores: []cache.Store{
				redis,
			},
			Fresh: 45 * time.Minute,
			Stale: 45 * time.Minute,
		}),
		Post: cache.NewNamespace[Post]("post", nil, cache.NamespaceConfig{
			Stores: []cache.Store{
				memory,
				redis,
			},
			Fresh: 10 * time.Minute,
			Stale: 10 * time.Minute,
		}),
	}

	service = &Service{
		cache: &c,
	}
}

License

MIT License

Credits

unkey-cache