执行结果缓存
原理
对于相同的输入,应用软件经过计算后,有相同的输出,可以将运算结果保存,在下次有相同的输入时,返回上次执行的结果。
修改方式
目前部分开源软件已经实现这种机制,举例如下:
- Nginx缓冲
基于局部性原理,Nginx使用proxy_cache_path等参数将请求过的内容在本地内存建立一个副本,这样对于缓存中的文件不用去后端服务器取。
- JIT编译
JIT(Just-In-Time)编译,将输入文件转为机器码。为了提升效率,转换后的机器码被缓存在内存,这样相同的输入(如JAVA程序的字节码)不用重新翻译,直接返回缓存中的内容。如果发现JAVA虚拟机的C1 Compiler/C2 Compiler线程的CPU占用比较多,可能是JIT缓冲不够,可以增加JAVA虚拟机ReservedCodeCacheSize参数。
- MySQL查询缓冲
MySQL的SQL语句缓存在内存中保存查询返回的结果。当查询命中时,直接返回解析后的SQL,跳过了查询操作的解析,优化和执行阶段。如果缓存的表被修改了,对应表的缓存就会失效。
MySQL查询缓冲状态可以通过如下语句查询:
show status like ‘%Qcache%’;
MySQL可以通过query_cache_size和query_cache_type来设置查询缓存的属性。
父主题: 优化方法