#cache #pingora #policy #eviction #algorithm #memory #high

TinyUFO

使用TinyLFU作为准入策略和S3-FIFO作为驱逐策略的内存缓存实现

4个版本 (2个重大更新)

0.3.0 2024年7月12日
0.2.0 2024年5月10日
0.1.1 2024年4月18日
0.1.0 2024年2月27日

缓存分类中排名94

Download history 133/week @ 2024-05-05 75/week @ 2024-05-12 64/week @ 2024-05-19 83/week @ 2024-05-26 62/week @ 2024-06-02 24/week @ 2024-06-09 51/week @ 2024-06-16 38/week @ 2024-06-23 93/week @ 2024-06-30 201/week @ 2024-07-07 180/week @ 2024-07-14 167/week @ 2024-07-21 180/week @ 2024-07-28 176/week @ 2024-08-04 196/week @ 2024-08-11 135/week @ 2024-08-18

每月下载量547
4 crates中使用

Apache-2.0

43KB
827

TinyUFO

TinyUFO是一个快速高效的内存缓存。它采用了最先进的S3-FIFO以及TinyLFU算法,以实现高吞吐量和高命中率。

用法

查看文档

性能比较

我们比较了TinyUFO与最常用的缓存算法lru,以及另一个优秀的缓存库moka,后者实现了TinyLFU。

命中率

下表显示了在不同缓存大小下,与lru相比,比较算法的缓存命中率。

缓存大小/总资产 TinyUFO TinyUFO - LRU TinyUFO - moka (TinyLFU)
0.5% 45.26% +14.21pp -0.33pp
1% 52.35% +13.19pp +1.69pp
5% 68.89% +10.14pp +1.91pp
10% 75.98% +8.39pp +1.59pp
25% 85.34% +5.39pp +0.95pp

TinyUFO和moka在命中率上大大提高了lru的命中率。在这个工作负载下,TinyUFO表现更佳。有关TinyUFO与S3-FIFO不同的缓存性能评估,请参阅这篇论文

速度

下表显示了每个缓存库每秒执行的操作次数。测试在x64 Linux桌面上使用8个线程进行。

设置 TinyUFO LRU moka
纯读 148.7百万ops 7.0百万ops 14.1百万ops
混合读写 80.9百万ops 6.8百万ops 16.6百万ops

由于TinyUFO的无锁设计,它的性能远远超过其他产品。

内存开销

TinyUFO提供了一种紧凑模式,通过牺牲原始读取速度来换取更高的内存效率。这种节省是否值得取决于实际的大小和工作负载。对于小型内存资源,节省的内存意味着可以缓存更多内容。

下表显示了在特定工作负载下,存储零大小资产时,与比较的缓存库的内存分配(以字节为单位)。

缓存大小 TinyUFO TinyUFO紧凑 LRU moka
100 39,409 19,000 9,408 354,376
1000 236,053 86,352 128,512 535,888
10000 2,290,635 766,024 1,075,648 2,489,088

依赖关系

~1.8–7MB
~39K SLoC