connect icon indicating copy to clipboard operation
connect copied to clipboard

Add tiny lfu in-memory cache

Open peczenyj opened this issue 2 years ago • 0 comments

Hello

When I was looking into go-redis/cache I discover the package go-tinylru and there is an interesting benchmark

Least Frequently Used (LFU) is a caching algorithm in which the least frequently used cache block is removed whenever the cache is overflowed.

Since the package does not offer an Add operation (that can fail if key already exists) I submit this pull request

The TinyLFU is described here: https://arxiv.org/abs/1512.00727

This paper proposes to use a frequency based cache admission policy in order to boost the effectiveness of caches subject to skewed access distributions. Given a newly accessed item and an eviction candidate from the cache, our scheme decides, based on the recent access history, whether it is worth admitting the new item into the cache at the expense of the eviction candidate. Realizing this concept is enabled through a novel approximate LFU structure called TinyLFU, which maintains an approximate representation of the access frequency of a large sample of recently accessed items. TinyLFU is very compact and light-weight as it builds upon Bloom filter theory. We study the properties of TinyLFU through simulations of both synthetic workloads as well as multiple real traces from several sources. These simulations demonstrate the performance boost obtained by enhancing various replacement policies with the TinyLFU eviction policy. Also, a new combined replacement and eviction policy scheme nicknamed W-TinyLFU is presented. W-TinyLFU is demonstrated to obtain equal or better hit-ratios than other state of the art replacement policies on these traces. It is the only scheme to obtain such good results on all traces.

Regards

peczenyj avatar Aug 04 '23 10:08 peczenyj