【发布时间】:2013-11-15 11:48:01
【问题描述】:
我想实现一个高效的 LRU 缓存,它会根据空闲内存自动驱逐项目。
现在只有两件事浮现在脑海:
- 投票gosigar
- 或设置一个固定的最大值并定期检查
runtime.ReadMemStats。
还有其他方法吗? memcached是怎么做到的?
【问题讨论】:
-
在 memcached 中,您指定要使用的内存量,它不适应操作系统或进程的内存容量或要求。
-
我有点喜欢用户调整的缓存大小,比如 memcached(以及 Go 中的 groupcache)。如果你想要一些自适应策略,也许让用户根据 total RAM 的百分比来指定大小,并默认为 1% 之类的安全值。空闲 RAM 在 Linux 中是一个有趣的数字,因为内核会尝试将 RAM 用于缓冲区/缓存以加速 I/O,并且它会根据系统当前的工作负载而有所不同。依赖它可能会使你的缓存的行为和对它运行的盒子的影响有点不可预测。
-
总内存的 1%?这就像缓存可以在 1GB 机器上保存 1000 个对象。也许我应该提到这不是一个单独的二进制文件,而是一个嵌入内存缓存的应用程序。
标签: go