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
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.
go get github.com/steamsets/go-cache@latest
Please see example folder
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,
}
}
MIT License