---
title: 执行结果缓存
description: "对于相同的输入，应用软件经过计算后，有相同的输出，可以将运算结果保存，在下次有相同的输入时，返回上次执行的结果。"
url: https://www.hikunpeng.com/document/detail/zh/perftuning/tuningtip/kunpengtuning_12_0048.html
sourcePath: /source/zh/perftuning/tuningtip/kunpengtuning_12_0048.html
indexId: 03d78c212e9874bb17f6ef7cac6f4e28c4eaed5aa5001a68d61b2c70fa27f9a758
---
# 执行结果缓存

#### 原理

对于相同的输入，应用软件经过计算后，有相同的输出，可以将运算结果保存，在下次有相同的输入时，返回上次执行的结果。


#### 修改方式

目前部分开源软件已经实现这种机制，举例如下：

1. Nginx缓存
  基于局部性原理，Nginx使用proxy_cache_path等参数将请求过的内容在本地内存建立一个副本，这样对于缓存中的文件无需去后端服务器取。

2. JIT编译
  JIT（Just-In-Time）编译，将输入文件转为机器码。为了提升效率，转换后的机器码被缓存在内存中，这样相同的输入（如Java程序的字节码）不用重新翻译，直接返回缓存中的内容。如果发现Java虚拟机的C1 Compiler/C2 Compiler线程的CPU占用比较多，可能是JIT缓存不够，可以增加Java虚拟机ReservedCodeCacheSize参数。

3. MySQL查询缓存
  MySQL的SQL语句缓存在内存中保存查询返回的结果。当查询命中时，直接返回解析后的SQL，跳过查询操作的解析、优化和执行阶段。如果缓存的表被修改了，对应表的缓存就会失效。

  MySQL查询缓存状态可以通过如下语句查询：

  1 show status like '%Qcache%';

  MySQL可以通过query_cache_size和query_cache_type来设置查询缓存的属性。
