https://github.com/begmaroman/go-ttlcache
An in-memory key => value store/cache library for Go built on generics
https://github.com/begmaroman/go-ttlcache
cache cache-storage generics golang-library golang-package in-memory-caching key-value ttl ttl-cache ttlcache
Last synced: 15 days ago
JSON representation
An in-memory key => value store/cache library for Go built on generics
- Host: GitHub
- URL: https://github.com/begmaroman/go-ttlcache
- Owner: begmaroman
- License: mit
- Created: 2022-07-20T13:06:36.000Z (almost 3 years ago)
- Default Branch: master
- Last Pushed: 2025-01-17T10:54:16.000Z (3 months ago)
- Last Synced: 2025-03-25T09:49:25.564Z (about 1 month ago)
- Topics: cache, cache-storage, generics, golang-library, golang-package, in-memory-caching, key-value, ttl, ttl-cache, ttlcache
- Language: Go
- Homepage:
- Size: 18.6 KB
- Stars: 4
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# go-ttlcache
`go-ttlcache` is a GoLang in-memory `key` => `value` store/cache that is
suitable for applications running on a single machine. Its major advantage is
that, being essentially a thread-safe and generically typed `map[K]Item[V]` with expiration
times, it doesn't need to serialize or transmit its contents over the network.Comparable key with any value can be stored, for a given duration or forever,
and the cache can be safely used by multiple goroutines.Although `go-ttlcache` isn't meant to be used as a persistent datastore, the entire
cache can be saved to and loaded from a file (using `c.Items()` to retrieve the
items map to serialize, and `NewFrom[K, V]()` to create a cache from a deserialized
one) to recover from downtime quickly. (See the docs for `NewFrom[K, V]()` for caveats.)### Requirements
[GoLang](https://go.dev/) >=1.18
### Installation
`go get github.com/begmaroman/go-ttlcache`
### Usage
```go
import (
"fmt"
"time"
"github.com/begmaroman/go-ttlcache"
)func main() {
// Create a cache with a default expiration time of 5 minutes, and which
// purges expired items every 10 minutes. Both key and value should be "string" type.
c := ttlcache.New[string, string](5*time.Minute, 10*time.Minute)
// There could be any comparable key type, and any value. For instance:
// c := ttlcache.New[string, MyType](5*time.Minute, 10*time.Minute)// Set the value of the key "foo" to "bar", with the default expiration time
c.Set("foo", "bar", ttlcache.DefaultExpiration)// Set the value of the key "baz" to "vaz", with no expiration time
// (the item won't be removed until it is re-set, or removed using
// c.Delete("baz")
c.Set("baz", "vaz", ttlcache.NoExpiration)// Get the string associated with the key "foo" from the cache
foo, found := c.Get("foo")
if found {
fmt.Println(foo)
}// Since Go is statically typed, and cache values can be anything, type
// assertion is needed when values are being passed to functions that don't
// take arbitrary types, (i.e. interface{}). The simplest way to do this for
// values which will only be used once--e.g. for passing to another
// function--is:
foo, found := c.Get("foo")
if found {
MyFunction(foo)
}// This gets tedious if the value is used several times in the same function.
// You might do either of the following instead:
if foo, found := c.Get("foo"); found {
// ...
}
}
```### Reference
`godoc` or [http://godoc.org/github.com/begmaroman/go-ttlcache](http://godoc.org/github.com/begmaroman/go-ttlcache)
Inspired by:
- https://github.com/jellydator/ttlcache
- https://github.com/patrickmn/go-cache