Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/cheshir/ttlcache
Simple in-memory key-value storage with TTL for each record.
https://github.com/cheshir/ttlcache
cache cache-storage go golang hacktoberfest inmemory-cache key-value ttl-cache ttl-cache-implementation
Last synced: about 2 months ago
JSON representation
Simple in-memory key-value storage with TTL for each record.
- Host: GitHub
- URL: https://github.com/cheshir/ttlcache
- Owner: cheshir
- License: mit
- Created: 2021-01-06T19:24:26.000Z (almost 4 years ago)
- Default Branch: main
- Last Pushed: 2022-10-02T17:36:34.000Z (about 2 years ago)
- Last Synced: 2024-07-31T20:49:02.241Z (5 months ago)
- Topics: cache, cache-storage, go, golang, hacktoberfest, inmemory-cache, key-value, ttl-cache, ttl-cache-implementation
- Language: Go
- Homepage:
- Size: 29.3 KB
- Stars: 9
- Watchers: 2
- Forks: 8
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-go - ttlcache - In-memory key value storage with TTL for each record. (Database / Caches)
- awesome-go-extra - ttlcache - memory key-value storage with TTL for each record.|6|6|0|2021-01-06T19:24:26Z|2022-05-04T18:51:48Z| (Generators / Caches)
README
[![Build Status](https://github.com/cheshir/ttlcache/actions/workflows/go.yml/badge.svg)](https://github.com/cheshir/ttlcache/actions/workflows/go.yml)
[![codecov](https://codecov.io/gh/cheshir/ttlcache/branch/main/graph/badge.svg?token=WsaH2t9dGh)](https://codecov.io/gh/cheshir/ttlcache)
[![Go Report Card](https://goreportcard.com/badge/cheshir/ttlcache)](https://goreportcard.com/report/github.com/cheshir/ttlcache)
[![GoDoc](https://godoc.org/github.com/cheshir/ttlcache?status.svg)](https://godoc.org/github.com/cheshir/ttlcache)
[![Mentioned in Awesome Go](https://awesome.re/mentioned-badge-flat.svg)](https://github.com/avelino/awesome-go)
[![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/cheshir/go-mq/blob/master/LICENSE)# ttlcache
## About
**ttlcache** – is a simple and efficient in-memory key value storage with TTL for each record.
The key is of uint64 type. Library provides wrappers for common types:
* IntKey
* ByteKey
* Int8Key
* Uint8Key
* Int16Key
* Uint16Key
* Int32Key
* Uint32Key
* Int64Key
* Uint64Key
* BytesKey ([]byte)
* StringKey
* AnyKey (interface{})`AnyKey` is not suitable for _very_ intensive usage. Consider writing your own hash function if your keys are complex types,
and you faced performance degradation.## Installation
`go get -u github.com/cheshir/ttlcache`
## Usage
```go
package mainimport (
"github.com/cheshir/ttlcache"
)const (
minute = 60 * time.Second
hour = 60 * minute
)func main() {
// How often we need to stop the world and remove outdated records.
resolution := minutecache := ttlcache.New(resolution)
cache.Set(ttlcache.StringKey("some key"), "value", hour)
value, ok := cache.Get(ttlcache.StringKey("some key"))
if !ok {
// there is no record with key "some key" in the cache. Probably it has been expired.
}fmt.Println(value.(string)) // This is necessary type assertion, because returned value is of interface{} type.
}
```## Performance
If you're interested in benchmarks you can check them in repository.
Just play with numbers and types and check that library is suitable for your purposes.`go test -bench=. -benchmem`
For those of us who wants to get some numbers without downloading unknown stuff (MacBook Pro 16"):
```go
BenchmarkCache_Set_100-16 8959221 125 ns/op
BenchmarkCache_Set_1000-16 9177854 123 ns/op
BenchmarkCache_Set_10000-16 9247304 131 ns/op
BenchmarkCache_Get_100-16 50562800 23.9 ns/op
BenchmarkCache_Get_1000-16 47270793 26.9 ns/op
BenchmarkCache_Get_10000-16 42578484 27.7 ns/op```