Update TwinProduction/gocache to v1.2.3

This commit is contained in:
TwinProduction 2021-06-18 09:56:49 -04:00
parent 0560b98de4
commit d03271d128
7 changed files with 24 additions and 23 deletions

2
go.mod
View File

@ -4,7 +4,7 @@ go 1.16
require (
cloud.google.com/go v0.74.0 // indirect
github.com/TwinProduction/gocache v1.2.2
github.com/TwinProduction/gocache v1.2.3
github.com/TwinProduction/health v1.0.0
github.com/go-ping/ping v0.0.0-20201115131931-3300c582a663
github.com/google/gofuzz v1.2.0 // indirect

4
go.sum
View File

@ -49,8 +49,8 @@ github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbt
github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo=
github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI=
github.com/TwinProduction/gocache v1.2.2 h1:GpIq4HW+oLFlxO8mXapWKx54qT8p7SMWh2tf91jkLDU=
github.com/TwinProduction/gocache v1.2.2/go.mod h1:Yj2daITit8TTBgiOpc26XCDSbg9xcFskUilHj9u3Mh8=
github.com/TwinProduction/gocache v1.2.3 h1:4wFNih4CemUX+A99Gk/EsaU0SXSNZV42Ve77v7/7ToY=
github.com/TwinProduction/gocache v1.2.3/go.mod h1:Yj2daITit8TTBgiOpc26XCDSbg9xcFskUilHj9u3Mh8=
github.com/TwinProduction/health v1.0.0 h1:TVyYTAORQQZ8LaptX8jCHZRCGCAO6e+oJx19BUIzQYY=
github.com/TwinProduction/health v1.0.0/go.mod h1:ys4mYKUeEfYrWmkm60xLtPjTuLIEDQNBZaTZvenLG1c=
github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g=

View File

@ -5,7 +5,7 @@
[![codecov](https://codecov.io/gh/TwinProduction/gocache/branch/master/graph/badge.svg)](https://codecov.io/gh/TwinProduction/gocache)
[![Go version](https://img.shields.io/github/go-mod/go-version/TwinProduction/gocache.svg)](https://github.com/TwinProduction/gocache)
[![Go Reference](https://pkg.go.dev/badge/github.com/TwinProduction/gocache.svg)](https://pkg.go.dev/github.com/TwinProduction/gocache)
[![Join Discord server](https://img.shields.io/discord/442432928614449155.svg?label=&logo=discord&logoColor=ffffff&color=7389D8&labelColor=6A7EC2)](https://discord.gg/44p4TRep)
[![Follow TwinProduction](https://img.shields.io/github/followers/TwinProduction?label=Follow&style=social)](https://github.com/TwinProduction)
gocache is an easy-to-use, high-performance, lightweight and thread-safe (goroutine-safe) in-memory key-value cache
with support for LRU and FIFO eviction policies as well as expiration, bulk operations and even persistence to file.

View File

@ -239,12 +239,12 @@ func (cache *Cache) SetWithTTL(key string, value interface{}, ttl time.Duration)
Key: key,
Value: value,
RelevantTimestamp: time.Now(),
previous: cache.head,
next: cache.head,
}
if cache.head == nil {
cache.tail = entry
} else {
cache.head.next = entry
cache.head.previous = entry
}
cache.head = entry
cache.entries[key] = entry
@ -519,10 +519,10 @@ func (cache *Cache) moveExistingEntryToHead(entry *Entry) {
cache.removeExistingEntryReferences(entry)
}
if entry != cache.head {
entry.previous = cache.head
entry.next = nil
entry.next = cache.head
entry.previous = nil
if cache.head != nil {
cache.head.next = entry
cache.head.previous = entry
}
cache.head = entry
}
@ -536,9 +536,9 @@ func (cache *Cache) removeExistingEntryReferences(entry *Entry) {
cache.tail = nil
cache.head = nil
} else if cache.tail == entry {
cache.tail = cache.tail.next
cache.tail = cache.tail.previous
} else if cache.head == entry {
cache.head = cache.head.previous
cache.head = cache.head.next
}
if entry.previous != nil {
entry.previous.next = entry.next

View File

@ -33,7 +33,7 @@ func (cache *Cache) StartJanitor() error {
}
cache.stopJanitor = make(chan bool)
go func() {
// rather than starting from the tail on every run, we can try to start from the last next entry
// rather than starting from the tail on every run, we can try to start from the last traversed entry
var lastTraversedNode *Entry
totalNumberOfExpiredKeysInPreviousRunFromTailToHead := 0
backOff := JanitorMinShiftBackOff
@ -62,13 +62,14 @@ func (cache *Cache) StartJanitor() error {
totalNumberOfExpiredKeysInPreviousRunFromTailToHead = 0
}
for current != nil {
var next *Entry
// since we're walking from the tail to the head, we get the previous reference
var previous *Entry
steps++
if current.Expired() {
expiredEntriesFound++
// Because delete will remove the next reference from the entry, we need to store the
// next reference before we delete it
next = current.next
// Because delete will remove the previous reference from the entry, we need to store the
// previous reference before we delete it
previous = current.previous
cache.delete(current.Key)
cache.stats.ExpiredKeys++
}
@ -76,11 +77,11 @@ func (cache *Cache) StartJanitor() error {
lastTraversedNode = nil
break
}
// Travel to the current node's next node only if no specific next node has been specified
if next != nil {
current = next
// Travel to the current node's previous node only if no specific previous node has been specified
if previous != nil {
current = previous
} else {
current = current.next
current = current.previous
}
lastTraversedNode = current
if steps == JanitorMaxIterationsPerShift || expiredEntriesFound >= JanitorShiftTarget {

View File

@ -120,8 +120,8 @@ func (cache *Cache) ReadFromFile(path string) (int, error) {
cache.tail = current
cache.head = current
} else {
previous.next = current
current.previous = previous
previous.previous = current
current.next = previous
cache.head = current
}
previous = entries[i]

2
vendor/modules.txt vendored
View File

@ -1,7 +1,7 @@
# cloud.google.com/go v0.74.0
## explicit
cloud.google.com/go/compute/metadata
# github.com/TwinProduction/gocache v1.2.2
# github.com/TwinProduction/gocache v1.2.3
## explicit
github.com/TwinProduction/gocache
# github.com/TwinProduction/health v1.0.0