How to make expiration optional.

This commit is contained in:
Everton da Silva Marques 2022-06-19 16:20:22 -03:00 committed by udhos
parent 87609ae02e
commit 33907cd323
2 changed files with 10 additions and 5 deletions

View File

@ -25,11 +25,12 @@ For API docs and examples, see http://godoc.org/github.com/mailgun/groupcache
cluster eventually becomes consistent again. cluster eventually becomes consistent again.
* Support for expired values. `SetBytes()`, `SetProto()` and `SetString()` now * Support for expired values. `SetBytes()`, `SetProto()` and `SetString()` now
accept an optional `time.Time{}` which represents a time in the future when the accept an optional `time.Time` which represents a time in the future when the
value will expire. Expiration is handled by the LRU Cache when a `Get()` on a value will expire. If you don't want expiration, pass the zero value for
key is requested. This means no network coordination of expired values is needed. `time.Time` (for instance, `time.Time{}`). Expiration is handled by the LRU Cache
However this does require that time on all nodes in the cluster is synchronized when a `Get()` on a key is requested. This means no network coordination of
for consistent expiration of values. expired values is needed. However this does require that time on all nodes in the
cluster is synchronized for consistent expiration of values.
* Now always populating the hotcache. A more complex algorithm is unnecessary * Now always populating the hotcache. A more complex algorithm is unnecessary
when the LRU cache will ensure the most used values remain in the cache. The when the LRU cache will ensure the most used values remain in the cache. The

View File

@ -33,6 +33,10 @@ var _ Sink = &byteViewSink{}
// //
// Implementation of Getter must call exactly one of the Set methods // Implementation of Getter must call exactly one of the Set methods
// on success. // on success.
//
// `e` sets an optional time in the future when the value will expire.
// If you don't want expiration, pass the zero value for
// `time.Time` (for instance, `time.Time{}`).
type Sink interface { type Sink interface {
// SetString sets the value to s. // SetString sets the value to s.
SetString(s string, e time.Time) error SetString(s string, e time.Time) error