timedmap

package module
v1.1.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 18, 2020 License: MIT Imports: 3 Imported by: 39

README

~ timedmap ~

A map which has expiring key-value pairs.

       

go get github.com/zekroTJA/timedmap

Intro

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

Here you can read the docs of this package, generated by godoc.org.


Usage Example

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 := tm.GetValue(key)
	if d == nil {
		log.Println("data expired")
		return
	}

	dInt := d.(int)
	log.Printf("%v = %d\n", key, dInt)
}

Further examples, you can find in the example 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, where I have used timedmap for storing client-based limiter instances:
https://github.com/zekroTJA/myrunes/blob/master/internal/webserver/ratelimit.go


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

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Section

type Section interface {
	Ident() int
	Set(key, value interface{}, expiresAfter time.Duration, cb ...callback)
	GetValue(key interface{}) interface{}
	GetExpires(key interface{}) (time.Time, error)
	Contains(key interface{}) bool
	Remove(key interface{})
	Refresh(key interface{}, d time.Duration) error
	Flush()
	Size() (i int)
}

Section defines a sectioned access wrapper of TimedMap.

type TimedMap

type TimedMap struct {
	// contains filtered or unexported fields
}

TimedMap contains a map with all key-value pairs, and a timer, which cleans the map in the set tick durations from expired keys.

func New

func New(cleanupTickTime time.Duration) *TimedMap

New creates and returns a new instance of TimedMap. The passed cleanupTickTime will be passed to the cleanup Timer, which iterates through the map and deletes expired key-value pairs.

func (*TimedMap) Contains

func (tm *TimedMap) Contains(key interface{}) bool

Contains returns true, if the key exists in the map. false will be returned, if there is no value to the key or if the key-value pair was expired.

func (*TimedMap) Flush

func (tm *TimedMap) Flush()

Flush deletes all key-value pairs of the map.

func (*TimedMap) GetExpires

func (tm *TimedMap) GetExpires(key interface{}) (time.Time, error)

GetExpires returns the expire time of a key-value pair. If the key-value pair does not exist in the map or was expired, this will return an error object.

func (*TimedMap) GetValue

func (tm *TimedMap) GetValue(key interface{}) interface{}

GetValue returns an interface of the value of a key in the map. The returned value is nil if there is no value to the passed key or if the value was expired.

func (*TimedMap) Ident

func (tm *TimedMap) Ident() int

Ident returns the current sections ident. In the case of the root object TimedMap, this is always 0.

func (*TimedMap) Refresh

func (tm *TimedMap) Refresh(key interface{}, d time.Duration) error

Refresh extends the expire time for a key-value pair about the passed duration. If there is no value to the key passed, this will return an error object.

func (*TimedMap) Remove

func (tm *TimedMap) Remove(key interface{})

Remove deletes a key-value pair in the map.

func (*TimedMap) Section

func (tm *TimedMap) Section(i int) Section

Section returns a sectioned subset of the timed map with the given section identifier i.

func (*TimedMap) Set

func (tm *TimedMap) Set(key, value interface{}, expiresAfter time.Duration, cb ...callback)

Set appends a key-value pair to the map or sets the value of a key. expiresAfter sets the expire time after the key-value pair will automatically be removed from the map.

func (*TimedMap) Size

func (tm *TimedMap) Size() int

Size returns the current number of key-value pairs existent in the map.

func (*TimedMap) StopCleaner

func (tm *TimedMap) StopCleaner()

StopCleaner stops the cleaner go routine and timer. This should always be called after exiting a scope where TimedMap is used that the data can be cleaned up correctly.

Directories

Path Synopsis
examples
default command
sections command

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL