Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/patrickmn/go-cache
An in-memory key:value store/cache (similar to Memcached) library for Go, suitable for single-machine applications.
https://github.com/patrickmn/go-cache
cache go library
Last synced: 5 days ago
JSON representation
An in-memory key:value store/cache (similar to Memcached) library for Go, suitable for single-machine applications.
- Host: GitHub
- URL: https://github.com/patrickmn/go-cache
- Owner: patrickmn
- License: mit
- Created: 2012-01-02T13:07:13.000Z (about 13 years ago)
- Default Branch: master
- Last Pushed: 2023-11-20T05:12:16.000Z (about 1 year ago)
- Last Synced: 2025-01-05T22:38:56.244Z (6 days ago)
- Topics: cache, go, library
- Language: Go
- Homepage: https://patrickmn.com/projects/go-cache/
- Size: 123 KB
- Stars: 8,250
- Watchers: 119
- Forks: 879
- Open Issues: 73
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- my-awesome - patrickmn/go-cache - 11 star:8.2k fork:0.9k An in-memory key:value store/cache (similar to Memcached) library for Go, suitable for single-machine applications. (Go)
- awesome-go-storage - go-cache - An in-memory key:value store/cache (similar to Memcached) library for Go, suitable for single-machine applications. (Key-Value Store)
- awesome-ccamel - patrickmn/go-cache - An in-memory key:value store/cache (similar to Memcached) library for Go, suitable for single-machine applications. (Go)
- awesome-github-star - go-cache - memory key:value store/cache (similar to Memcached) library for Go, suitable for single-machine applications. | patrickmn | 7447 | (Go)
- go-awesome - go-cache - KV memory cache (Open source library / Cache)
- awesome-golang-repositories - go-cache - memory key:value store/cache (similar to Memcached) library for Go, suitable for single-machine applications. (Repositories)
- awesome-go-storage - go-cache - An in-memory key:value store/cache (similar to Memcached) library for Go, suitable for single-machine applications. (Key-Value Store)
README
# go-cache
go-cache is an in-memory key:value store/cache similar to memcached that is
suitable for applications running on a single machine. Its major advantage is
that, being essentially a thread-safe `map[string]interface{}` with expiration
times, it doesn't need to serialize or transmit its contents over the network.Any object can be stored, for a given duration or forever, and the cache can be
safely used by multiple goroutines.Although go-cache 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()` to create a cache from a deserialized
one) to recover from downtime quickly. (See the docs for `NewFrom()` for caveats.)### Installation
`go get github.com/patrickmn/go-cache`
### Usage
```go
import (
"fmt"
"github.com/patrickmn/go-cache"
"time"
)func main() {
// Create a cache with a default expiration time of 5 minutes, and which
// purges expired items every 10 minutes
c := cache.New(5*time.Minute, 10*time.Minute)// Set the value of the key "foo" to "bar", with the default expiration time
c.Set("foo", "bar", cache.DefaultExpiration)// Set the value of the key "baz" to 42, with no expiration time
// (the item won't be removed until it is re-set, or removed using
// c.Delete("baz")
c.Set("baz", 42, cache.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.(string))
}// This gets tedious if the value is used several times in the same function.
// You might do either of the following instead:
if x, found := c.Get("foo"); found {
foo := x.(string)
// ...
}
// or
var foo string
if x, found := c.Get("foo"); found {
foo = x.(string)
}
// ...
// foo can then be passed around freely as a string// Want performance? Store pointers!
c.Set("foo", &MyStruct, cache.DefaultExpiration)
if x, found := c.Get("foo"); found {
foo := x.(*MyStruct)
// ...
}
}
```### Reference
`godoc` or [http://godoc.org/github.com/patrickmn/go-cache](http://godoc.org/github.com/patrickmn/go-cache)