增加缓存优化消息队列在特定情况下读取性能下降的问题

写者持续的写入数据到磁盘上,读者1实时读区写者最新保存的数据,读取数据的时候一般都会在page_cache中找到,不用从磁盘获取。

但是如果有另外一个读者要读区很早的数据,应为较早的数据在page_cache中已经不存在,所以系统在从磁盘获取到数据后,回把数据保存到page_cache中,以方便后续读取该数据到请求直接从cache中获取减少磁盘IO。但是这样会导致写着新保存到page_cache中的数据被挤掉,想获取新数据只能从磁盘获取,反而让之前的读者的读取性能下降。

解决办法就是在内存中增加缓存,让写着在磁盘后,另外在保存一份在内存,所有读者读区数据时,线在内存中查找是否存在,如果存在直接返回,否则不存在,再走正常的流程获取数据。这样就避免了上述情况导致的读区性能下降的问题。

参考:

https://www.infoq.cn/article/Q0o*QzLQiay31MWiOBJH

原文地址:https://www.cnblogs.com/zcqkk/p/10949403.html