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日 |
#90 在 缓存
每月下载量547次
用于 4 crates
43KB
827 行
TinyUFO
TinyUFO 是一个快速高效的内存缓存。它采用最先进的 S3-FIFO 以及 TinyLFU 算法,以同时实现高吞吐量和高命中率。
使用方法
请参阅文档
性能比较
我们比较了 TinyUFO 与最常用的缓存算法 lru 以及另一个优秀的缓存库 moka,它实现了 TinyLFU。
命中率
下表显示了在不同缓存大小下,比较算法的缓存命中率,zipf=1。
缓存大小 / 总资产 | 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 都大大提高了命中率,TinyUFO 在此工作负载中表现更佳。 这篇论文 包含了更多关于 S3-FIFO 的缓存性能评估,TinyUFO 与许多缓存算法在各种工作负载下的比较。
速度
下表显示了每个缓存库每秒执行的操作次数。测试在 x64 Linux 桌面上的 8 个线程上进行。
设置 | TinyUFO | LRU | moka |
---|---|---|---|
纯读 | 148.7 百万 ops | 700 万 ops | 1410 万 ops |
混合读写 | 8090 万 ops | 680 万 ops | 1660 万 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–7.5MB
~39K SLoC