consistent

package
v0.2.0 Latest Latest
Warning

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

Go to latest
Published: May 8, 2023 License: MIT Imports: 6 Imported by: 0

Documentation

Overview

Package consistent provides a consistent hashing function.

Consistent hashing is often used to distribute requests to a changing set of servers. For example, say you have some cache servers cacheA, cacheB, and cacheC. You want to decide which cache server to use to look up information on a user.

You could use a typical hash table and hash the user id to one of cacheA, cacheB, or cacheC. But with a typical hash table, if you add or remove a server, almost all keys will get remapped to different results, which basically could bring your service to a grinding halt while the caches get rebuilt.

With a consistent hash, adding or removing a server drastically reduces the number of keys that get remapped.

Read more about consistent hashing on wikipedia: http://en.wikipedia.org/wiki/Consistent_hashing

Index

Constants

This section is empty.

Variables

View Source
var ErrEmptyCircle = errors.New("empty circle")

ErrEmptyCircle is the error returned when trying to get an element when nothing has been added to hash.

Functions

This section is empty.

Types

type Consistent

type Consistent[M Member] struct {
	NumberOfReplicas int

	UseFnv bool
	sync.RWMutex
	// contains filtered or unexported fields
}

Consistent holds the information about the members of the consistent hash circle.

func New

func New[M Member]() *Consistent[M]

New creates a new Consistent object with a default setting of 20 replicas for each entry.

To change the number of replicas, set NumberOfReplicas before adding entries.

func (*Consistent[M]) Add

func (c *Consistent[M]) Add(elt M)

Add inserts a string element in the consistent hash.

func (*Consistent[M]) Get

func (c *Consistent[M]) Get(name string) (res M, err error)

Get returns an element close to where name hashes to in the circle.

func (*Consistent[M]) GetN

func (c *Consistent[M]) GetN(name string, n int) (res []M, err error)

GetN returns the N closest distinct elements to the name input in the circle.

func (*Consistent[M]) GetTwo

func (c *Consistent[M]) GetTwo(name string) (a M, b M, err error)

GetTwo returns the two closest distinct elements to the name input in the circle.

func (*Consistent[M]) Members

func (c *Consistent[M]) Members() []string

func (*Consistent[M]) Remove

func (c *Consistent[M]) Remove(elt M)

Remove removes an element from the hash.

func (*Consistent[M]) Set

func (c *Consistent[M]) Set(elts []M)

Set sets all the elements in the hash. If there are existing elements not present in elts, they will be removed.

type Member

type Member interface {
	String() string
}

Jump to

Keyboard shortcuts

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