作者回复: 与尾部的距离=最后一个一条消息的尾部位置 - 页面的位置
这个值越小,说明请求的数据与尾部越近,置换的时候被留下的概率也就越大。
对于历史数据,由于距离远,这个值会很大,那这些页面在置换的时候被留下的概率就很小,所以很快就会被从内从中置换出去。
作者回复: 你这个实现中,命中缓存后“移动元素到尾部”这个操作,同时会移动其它无关的元素的位置(从队头移到队尾),这样就不满足LRU的原则了,可以试试将队列换成链表这种可以支持随机写的数据结构。
作者回复: 👍👍👍
作者回复: DirectBuffer确实也需要经过PageCache,但是它有更好的批量大小,写入时的系统调用次数也会更少,所以性能更好一些。
作者回复: 对应的几个写文件的系统调用都会经过PageCache,比如write pwrite还有mmap
作者回复: 👍👍👍
作者回复: A1:是的。
A2:是的。
对于问题3和4,你可以看一下关于JMQ的这篇文章:
https://www.jiqizhixin.com/articles/2019-01-21-19