Skip to content

sysulq/golang-lru

 
 

Repository files navigation

golang-lru

Build Status Coverage

This provides the lru package which implements a fixed-size thread safe LRU cache with expire feature. It is based on golang-lru.

Documentation

Full docs are available on Godoc

Example

Using the LRU is very simple:

l, _ := NewARCWithExpire(128, 30*time.Second)
for i := 0; i < 256; i++ {
    l.Add(i, nil)
}
if l.Len() != 128 {
    panic(fmt.Sprintf("bad len: %v", l.Len()))
}

Benchmarks

Running tool: /home/liqi/workspace/go/bin/go test -benchmem -run=^$ -coverprofile=/tmp/vscode-govFyHq9/go-code-cover -bench . github.com/sysulq/golang-lru

goos: linux
goarch: amd64
pkg: github.com/sysulq/golang-lru
Benchmark2Q_Rand-4    	 1000000	      1415 ns/op	     158 B/op	       5 allocs/op
--- BENCH: Benchmark2Q_Rand-4
    2q_test.go:34: hit: 0 miss: 1 ratio: 0.000000
    2q_test.go:34: hit: 1 miss: 99 ratio: 0.010101
    2q_test.go:34: hit: 1381 miss: 8619 ratio: 0.160227
    2q_test.go:34: hit: 248530 miss: 751470 ratio: 0.330725
Benchmark2Q_Freq-4    	 1000000	      1017 ns/op	     143 B/op	       5 allocs/op
--- BENCH: Benchmark2Q_Freq-4
    2q_test.go:66: hit: 1 miss: 0 ratio: +Inf
    2q_test.go:66: hit: 100 miss: 0 ratio: +Inf
    2q_test.go:66: hit: 9840 miss: 160 ratio: 61.500000
    2q_test.go:66: hit: 332417 miss: 667583 ratio: 0.497941
BenchmarkARC_Rand-4   	 1000000	      1402 ns/op	     193 B/op	       6 allocs/op
--- BENCH: BenchmarkARC_Rand-4
    arc_test.go:39: hit: 0 miss: 1 ratio: 0.000000
    arc_test.go:39: hit: 1 miss: 99 ratio: 0.010101
    arc_test.go:39: hit: 1398 miss: 8602 ratio: 0.162520
    arc_test.go:39: hit: 249099 miss: 750901 ratio: 0.331733
BenchmarkARC_Freq-4   	  963909	      1190 ns/op	     166 B/op	       5 allocs/op
--- BENCH: BenchmarkARC_Freq-4
    arc_test.go:71: hit: 1 miss: 0 ratio: +Inf
    arc_test.go:71: hit: 100 miss: 0 ratio: +Inf
    arc_test.go:71: hit: 9860 miss: 140 ratio: 70.428571
    arc_test.go:71: hit: 310475 miss: 653434 ratio: 0.475144
BenchmarkLRU_Rand-4   	 2287102	       613 ns/op	      88 B/op	       3 allocs/op
--- BENCH: BenchmarkLRU_Rand-4
    lru_test.go:34: hit: 0 miss: 1 ratio: 0.000000
    lru_test.go:34: hit: 0 miss: 100 ratio: 0.000000
    lru_test.go:34: hit: 1379 miss: 8621 ratio: 0.159958
    lru_test.go:34: hit: 248489 miss: 751511 ratio: 0.330653
    lru_test.go:34: hit: 570640 miss: 1716462 ratio: 0.332451
BenchmarkLRU_Freq-4   	 2456690	       487 ns/op	      83 B/op	       3 allocs/op
--- BENCH: BenchmarkLRU_Freq-4
    lru_test.go:66: hit: 1 miss: 0 ratio: +Inf
    lru_test.go:66: hit: 100 miss: 0 ratio: +Inf
    lru_test.go:66: hit: 9846 miss: 154 ratio: 63.935065
    lru_test.go:66: hit: 312529 miss: 687471 ratio: 0.454607
    lru_test.go:66: hit: 752485 miss: 1704205 ratio: 0.441546
PASS
coverage: 54.9% of statements
ok  	github.com/sysulq/golang-lru	9.138s

Running tool: /home/liqi/workspace/go/bin/go test -benchmem -run=^$ -coverprofile=/tmp/vscode-govFyHq9/go-code-cover -bench . github.com/sysulq/golang-lru

goos: linux
goarch: amd64
pkg: github.com/sysulq/golang-lru
Benchmark2Q_Rand-4    	 1000000	      1090 ns/op	      92 B/op	       4 allocs/op
--- BENCH: Benchmark2Q_Rand-4
    2q_test.go:34: hit: 0 miss: 1 ratio: 0.000000
    2q_test.go:34: hit: 0 miss: 100 ratio: 0.000000
    2q_test.go:34: hit: 1375 miss: 8625 ratio: 0.159420
    2q_test.go:34: hit: 249496 miss: 750504 ratio: 0.332438
Benchmark2Q_Freq-4    	 1223035	       944 ns/op	      85 B/op	       4 allocs/op
--- BENCH: Benchmark2Q_Freq-4
    2q_test.go:66: hit: 1 miss: 0 ratio: +Inf
    2q_test.go:66: hit: 100 miss: 0 ratio: +Inf
    2q_test.go:66: hit: 9872 miss: 128 ratio: 77.125000
    2q_test.go:66: hit: 334464 miss: 665536 ratio: 0.502548
    2q_test.go:66: hit: 405282 miss: 817753 ratio: 0.495604
BenchmarkARC_Rand-4   	 1000000	      1330 ns/op	     111 B/op	       4 allocs/op
--- BENCH: BenchmarkARC_Rand-4
    arc_test.go:39: hit: 0 miss: 1 ratio: 0.000000
    arc_test.go:39: hit: 0 miss: 100 ratio: 0.000000
    arc_test.go:39: hit: 1368 miss: 8632 ratio: 0.158480
    arc_test.go:39: hit: 248419 miss: 751581 ratio: 0.330529
BenchmarkARC_Freq-4   	 1000000	      1090 ns/op	      93 B/op	       4 allocs/op
--- BENCH: BenchmarkARC_Freq-4
    arc_test.go:71: hit: 1 miss: 0 ratio: +Inf
    arc_test.go:71: hit: 100 miss: 0 ratio: +Inf
    arc_test.go:71: hit: 9876 miss: 124 ratio: 79.645161
    arc_test.go:71: hit: 337535 miss: 662465 ratio: 0.509514
BenchmarkLRU_Rand-4   	 2327682	       509 ns/op	      52 B/op	       2 allocs/op
--- BENCH: BenchmarkLRU_Rand-4
    lru_test.go:34: hit: 0 miss: 1 ratio: 0.000000
    lru_test.go:34: hit: 1 miss: 99 ratio: 0.010101
    lru_test.go:34: hit: 1478 miss: 8522 ratio: 0.173433
    lru_test.go:34: hit: 249019 miss: 750981 ratio: 0.331592
    lru_test.go:34: hit: 580746 miss: 1746936 ratio: 0.332437
BenchmarkLRU_Freq-4   	 2630702	       475 ns/op	      49 B/op	       2 allocs/op
--- BENCH: BenchmarkLRU_Freq-4
    lru_test.go:66: hit: 1 miss: 0 ratio: +Inf
    lru_test.go:66: hit: 100 miss: 0 ratio: +Inf
    lru_test.go:66: hit: 9784 miss: 216 ratio: 45.296296
    lru_test.go:66: hit: 311783 miss: 688217 ratio: 0.453030
    lru_test.go:66: hit: 810266 miss: 1820436 ratio: 0.445094
PASS
coverage: 55.3% of statements
ok  	github.com/sysulq/golang-lru	9.714s
Running tool: /home/liqi/workspace/go/bin/go test -benchmem -run=^$ -coverprofile=/tmp/vscode-govFyHq9/go-code-cover -bench . github.com/sysulq/golang-lru

goos: linux
goarch: amd64
pkg: github.com/sysulq/golang-lru
Benchmark2Q_Rand-4    	 1000000	      1311 ns/op	      26 B/op	       2 allocs/op
--- BENCH: Benchmark2Q_Rand-4
    2q_test.go:34: hit: 0 miss: 1 ratio: 0.000000
    2q_test.go:34: hit: 0 miss: 100 ratio: 0.000000
    2q_test.go:34: hit: 1320 miss: 8680 ratio: 0.152074
    2q_test.go:34: hit: 249497 miss: 750503 ratio: 0.332440
Benchmark2Q_Freq-4    	 1515253	       811 ns/op	      25 B/op	       2 allocs/op
--- BENCH: Benchmark2Q_Freq-4
    2q_test.go:66: hit: 1 miss: 0 ratio: +Inf
    2q_test.go:66: hit: 100 miss: 0 ratio: +Inf
    2q_test.go:66: hit: 9880 miss: 120 ratio: 82.333333
    2q_test.go:66: hit: 333341 miss: 666659 ratio: 0.500017
    2q_test.go:66: hit: 416877 miss: 839436 ratio: 0.496616
    2q_test.go:66: hit: 500425 miss: 1014828 ratio: 0.493113
BenchmarkARC_Rand-4   	 1000000	      1162 ns/op	      27 B/op	       2 allocs/op
--- BENCH: BenchmarkARC_Rand-4
    arc_test.go:39: hit: 0 miss: 1 ratio: 0.000000
    arc_test.go:39: hit: 0 miss: 100 ratio: 0.000000
    arc_test.go:39: hit: 1437 miss: 8563 ratio: 0.167815
    arc_test.go:39: hit: 248890 miss: 751110 ratio: 0.331363
BenchmarkARC_Freq-4   	 1418329	       860 ns/op	      26 B/op	       2 allocs/op
--- BENCH: BenchmarkARC_Freq-4
    arc_test.go:71: hit: 1 miss: 0 ratio: +Inf
    arc_test.go:71: hit: 100 miss: 0 ratio: +Inf
    arc_test.go:71: hit: 9847 miss: 153 ratio: 64.359477
    arc_test.go:71: hit: 337917 miss: 662083 ratio: 0.510385
    arc_test.go:71: hit: 472261 miss: 946068 ratio: 0.499183
BenchmarkLRU_Rand-4   	 2970676	       397 ns/op	      16 B/op	       1 allocs/op
--- BENCH: BenchmarkLRU_Rand-4
    lru_test.go:34: hit: 0 miss: 1 ratio: 0.000000
    lru_test.go:34: hit: 0 miss: 100 ratio: 0.000000
    lru_test.go:34: hit: 1375 miss: 8625 ratio: 0.159420
    lru_test.go:34: hit: 249937 miss: 750063 ratio: 0.333221
    lru_test.go:34: hit: 741873 miss: 2228803 ratio: 0.332857
BenchmarkLRU_Freq-4   	 3186918	       359 ns/op	      16 B/op	       1 allocs/op
--- BENCH: BenchmarkLRU_Freq-4
    lru_test.go:66: hit: 1 miss: 0 ratio: +Inf
    lru_test.go:66: hit: 100 miss: 0 ratio: +Inf
    lru_test.go:66: hit: 9874 miss: 126 ratio: 78.365079
    lru_test.go:66: hit: 312430 miss: 687570 ratio: 0.454397
    lru_test.go:66: hit: 977757 miss: 2209161 ratio: 0.442592
PASS
coverage: 55.3% of statements
ok  	github.com/sysulq/golang-lru	11.639s