Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

https://github.com/zekroTJA/timedmap

A thread safe map which has expiring key-value pairs.
https://github.com/zekroTJA/timedmap

go golang hacktoberfest library map package time timemap

Last synced: about 1 month ago
JSON representation

A thread safe map which has expiring key-value pairs.

Lists

README

        


~ timedmap ~


A map which has expiring key-value pairs.


 
 
 
 



---


go get -u github.com/zekroTJA/timedmap

---

## Intro

This package allows to set values to a map which will expire and disappear after a specified time.

[Here](https://pkg.go.dev/github.com/zekroTJA/timedmap) you can read the docs of this package, generated by pkg.go.dev.

---

## Usage Example

```go
package main

import (
"log"
"time"

"github.com/zekroTJA/timedmap"
)

func main() {
// Create a timed map with a cleanup timer interval of 1 second
tm := timedmap.New(1 * time.Second)
// Set value of key "hey" to 213, which will expire after 3 seconds
tm.Set("hey", 213, 3*time.Second)
// Print the value of "hey"
printKeyVal(tm, "hey")
// Block the main thread for 5 seconds
// After this time, the key-value pair "hey": 213 has expired
time.Sleep(5 * time.Second)
// Now, this function should show that there is no key "hey"
// in the map, because it has been expired
printKeyVal(tm, "hey")
}

func printKeyVal(tm *timedmap.TimedMap, key interface{}) {
d, ok := tm.GetValue(key).(int)
if !ok {
log.Println("data expired")
return
}

log.Printf("%v = %d\n", key, d)
}
```

Further examples, you can find in the [example](examples) directory.

If you want to see this package in a practcal use case scenario, please take a look at the rate limiter implementation of the REST API of [myrunes.com](https://myrunes.com), where I have used `timedmap` for storing client-based limiter instances:
https://github.com/myrunes/backend/blob/master/internal/ratelimit/ratelimit.go

---

Copyright (c) 2020 zekro Development (Ringo Hoffmann).
Covered by MIT licence.