https://github.com/NdoleStudio/lfu-cache
Strongly typed least frequently used (LFU) cache in Go with constant time complexity O(1) on all operations
https://github.com/NdoleStudio/lfu-cache
algorithm cache go lfu-cache lfu-implementation
Last synced: 11 days ago
JSON representation
Strongly typed least frequently used (LFU) cache in Go with constant time complexity O(1) on all operations
- Host: GitHub
- URL: https://github.com/NdoleStudio/lfu-cache
- Owner: NdoleStudio
- License: mit
- Created: 2020-04-14T08:10:46.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2025-01-30T05:02:50.000Z (4 months ago)
- Last Synced: 2025-04-10T17:34:21.057Z (about 1 month ago)
- Topics: algorithm, cache, go, lfu-cache, lfu-implementation
- Language: Go
- Homepage:
- Size: 39.1 KB
- Stars: 9
- Watchers: 1
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-golang-repositories - lfu-cache
README
Lest Frequently Used (LFU) Cache
==================================
[](https://travis-ci.com/NdoleStudio/lfu-cache)
[](https://codecov.io/gh/NdoleStudio/lfu-cache)
[](https://goreportcard.com/report/github.com/NdoleStudio/lfu-cache)
[](https://github.com/NdoleStudio/lfu-cache/graphs/contributors)
[](https://github.com/NdoleStudio/lfu-cache/blob/master/LICENSE)
[](https://pkg.go.dev/github.com/NdoleStudio/lfu-cache)This is an in memory implementation of a least frequently used (LFU) cache in Go with constant time complexity O(1) for `Set`, `Set`, and `Cache Eviction` operations. The least recently used item is evicted in the case where 2 items thems have the same least frequency.
It's based on this paper [http://dhruvbird.com/lfu.pdf](http://dhruvbird.com/lfu.pdf) by some very smart people
## Documentation
You can use view the standard documentation on [https://pkg.go.dev/github.com/NdoleStudio/lfu-cache](https://pkg.go.dev/github.com/NdoleStudio/lfu-cache). I wrote a beginner friendly blog post [here](https://acho.arnold.cf/lfu-cache-go/)
## Install
```shell
go get https://github.com/NdoleStudio/lfu-cache/v2
```## Usage
- To get started, import the `lfu-cache` package and create a cache instance. `New()` returns an `ErrInvalidCap` error if you input a capacity which is less than or equal to `0`.
```go
import "https://github.com/NdoleStudio/lfu-cache/v2"
// creating the cache with capacity 3
cache, err := lfucache.New[string, int](3)
if err != nil {
// the cap is invalid
}
// DO NOT DO THIS
cache := lfucache.Cache{}
```- Inserting a value in the cache. `Set()` returns `ErrInvalidCap` if the cache capacity is less than or equal to zero. Ideally you should NEVER get this error
```go
err := cache.Set("key", "value")
if err != nil {
// the cap is invalid
}
```- Getting a value in from the cache. `Get()` returns `ErrCacheMiss` if there is a cache miss
```go
val, err := cache.Get("key")
if err != nil {
// cache miss
}
or
if err == lfucache.ErrCacheMiss {
// cache miss
}
println(val) // val is of type `int`
```- There are some helper methods like `IsEmpty()`, `Len()`, `IsFull` `Cap()`
```go
// creating the cache with capacity 3
cache, _ := lfucache.New[string, string](3)
// setting a value
_ = cache.Set("key", "value")
cache.IsEmpty() // returns false
cache.Len() // returns 1 because there is 1 item in the cache
cache.IsFull() // returns false because the cache is not full
cache.Cap() // returns 3 which is the capacity of the cache
```### Running Tests
To run tests, cd to the project directory and run
```bash
go test -v
```## Versioning
We use [SemVer](http://semver.org/) for versioning. For the versions available, see the [tags on this repository](https://github.com/NdoleStudio/lfu-cache/tags).
## Authors
* **[AchoArnold](https://github.com/AchoArnold)**
See also the list of [contributors](https://github.com/NdoleStudio/lfu-cache/contributors) who participated in this project.
## License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details