非数据库操作实现缓存有意义吗?实现它以评估冗长的代码块是否有意义?例如,我有一个接受参数的代码块。基于这个参数,它会遍历 if/else 块的洗衣列表,直到它匹配正确的值并返回一个值。在我的例子中,IN 参数是有限的,OUT 参数是基于 IN 参数的一致,即对于每个"A",返回是"B",对于每个"X",返回是"Z"。此类操作不涉及数据库记录。我想知道通过引入缓存,从长远来看,我可以减少评估的任何时间。建议?谢谢。
只要执行的代码足够冗长或复杂,以至于证明工作量是合理的,这就非常有意义。例如,参见 Spring 在 http://static.springsource.org/spring/docs/3.1.0.M1/spring-framework-reference/html/cache.html 上的缓存注释支持,它适用于 Java 方法级别。但是你可以在非 Spring 环境中轻松地自己实现这种方法。
您应该首先分析应用程序,以查看在受影响的代码块中花费了多少时间/CPU,以查看缓存在这里是否有意义。
这取决于您如何重视低延迟。根据Google的演示文稿(幻灯片#13),从主内存中读取1 MB的顺序读取成本约为0.25 ms,并且还有很多其他更昂贵的东西。从同一张幻灯片:
- 单个磁盘寻道的速度要慢 40 倍;
- 从网络读取 1 MB 的数据慢 40 倍;
- 从磁盘读取 1 MB 数据的速度要慢 120 倍
因此,缓存在某些情况下可以有很大帮助,但您需要进行分析并查看您的算法浪费了多少时间,然后做出决定。