private Chunk get(
      ChunkCacheKey chunkCacheKey,
      List<TimeRange> timeRangeList,
      Statistics chunkStatistic,
      boolean debug,
      LongConsumer ioSizeRecorder,
      LongConsumer cacheHitAdder,
      LongConsumer cacheMissAdder)
      throws IOException {
    long startTime = System.nanoTime();
    ChunkLoader chunkLoader = new ChunkLoader(ioSizeRecorder);
    try {
      if (!CACHE_ENABLE) {
        Chunk chunk = chunkLoader.apply(chunkCacheKey);
        return constructChunk(chunk, timeRangeList, chunkStatistic);
      }

      Chunk chunk = lruCache.get(chunkCacheKey, chunkLoader);

      if (debug) {
        DEBUG_LOGGER.info("get chunk from cache whose key is: {}", chunkCacheKey);
      }

      return constructChunk(chunk, timeRangeList, chunkStatistic);
    } catch (IoTDBIORuntimeException e) {
      throw e.getCause();
    } finally {
      if (chunkLoader.isCacheMiss()) {
        cacheMissAdder.accept(1);
        SERIES_SCAN_COST_METRIC_SET.recordSeriesScanCost(
            READ_CHUNK_FILE, System.nanoTime() - startTime);
      } else {
        cacheHitAdder.accept(1);
        SERIES_SCAN_COST_METRIC_SET.recordSeriesScanCost(
            READ_CHUNK_CACHE, System.nanoTime() - startTime);
      }
    }
  }
This class is used to cache <code>Chunk</code> of <code>ChunkMetaData</code> in IoTDB. The
caching strategy is LRU.
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/buffer/ChunkCache.java