乐于分享
好东西不私藏

AI时代的缓存架构设计:大厂Java面试场景题

AI时代的缓存架构设计:大厂Java面试场景题
☕ Java 面试日刊 · 第 27 期

AI 时代的缓存架构设计
你真的会用缓存吗?

多级缓存 L1+L2、语义缓存去重、Cache-Aside vs Write-Through 选型——这道高频场景题,99% 的候选人只答了个壳

🎯 难度:P7 场景题 ⏱ 阅读约 12 分钟
趋势背景

LLM 让缓存重新成为核心命题

在传统 Web 场景,缓存的目标很简单:降低数据库压力、加速响应。但进入 AI 工程化时代,缓存面临三个全新挑战:

  • LLM 调用成本高昂:GPT-4o 一次对话 0.01 美元起步,相同语义的问题被反复调用,直接烧钱。
  • Embedding 计算昂贵:每次向量化一段文档需要调用 Embedding API,批量场景下 I/O 和费用都不可忽视。
  • 生成内容不是精确值:传统缓存基于 key 完全匹配,但用户问"茅台今天涨了多少"和"今天茅台股价如何"是同一个语义——必须用向量相似度做模糊命中。
大厂现状:字节/腾讯/阿里的 AI 平台团队均在 RAG、Chat 场景引入了语义缓存层,命中率 30%~60% 不等,Token 消耗大幅下降。这正是 2026 年 P7/P8 面试的高频考点。
面试场景题

面试官怎么问?

我们的 AI 客服系统日均 500 万次问答,LLM 调用成本每月 20 万元。
你来设计一套缓存方案:要求既能命中语义相同的问题,也能保证数据一致性,同时缓存层本身不能成为单点瓶颈。

追问 1:缓存击穿、缓存穿透、缓存雪崩,在 AI 推理场景下有什么特殊表现?你会怎么处理?

追问 2:Write-Through 和 Cache-Aside 在 LLM 结果缓存里哪个更合适?为什么?

考察维度

📐 架构设计能力 🔢 成本意识 ⚡ 高可用设计 🧠 AI工程化理解 🔒 数据一致性 💡 细节深度
⚠️ 面试坑:大多数候选人只说「加个 Redis」,忽略了 AI 场景特有的语义缓存和 TTL 策略。面试官真正想看的是分层思维和 AI 场景感知。
参考答案框架

三层缓存架构:L1 → L2 → L3(语义层)

请求入口
    
┌─────────────────────────────────────────────────────┐
│ L1 本地缓存 Caffeine(JVM Heap,~200MB) │
│ 命中率 ~40%,延迟 <1ms,无网络开销 │
└─────────────────────────────────────────────────────┘
    ↓ MISS
┌─────────────────────────────────────────────────────┐
│ L2 分布式缓存 Redis Cluster(精确 key 匹配) │
│ 命中率 ~35%,延迟 1~5ms,支持集群扩展 │
└─────────────────────────────────────────────────────┘
    ↓ MISS
┌─────────────────────────────────────────────────────┐
│ L3 语义缓存 pgvector / Qdrant(向量相似度匹配) │
│ 命中率 ~20%,延迟 10~30ms,覆盖语义等价问题 │
└─────────────────────────────────────────────────────┘
    ↓ MISS
调用 LLM(兜底)→ 异步回写三层缓存

选型矩阵:何时用哪种策略

缓存策略适用场景一致性复杂度AI推理场景推荐
Cache-Aside读多写少,数据库为主最终一致✅ 推荐(LLM结果只读)
Write-Through写操作多,强一致需求强一致❌ LLM无"更新"语义
Write-Behind高写吞吐,允许短暂丢失⚠️ 日志异步落库可用
语义缓存NLP/Chat,语义等价问题最终一致✅ AI场景核心武器
Refresh-Ahead热点数据,TTL快到期时提前刷最终一致✅ 热门问题预热有用
🎯 回答要点:LLM 生成结果本质上是"只写一次、永久只读"的不可变值(Immutable Response),没有更新语义,天然适合 Cache-Aside。Write-Through 的价值在于写操作后立即同步缓存,对 LLM 无意义。答出这一点,面试官会明显加分。
关键代码片段 · 01

L1 Caffeine + L2 Redis 二级缓存

TieredCacheService.java
@Service
public class TieredCacheService {

    // L1: 本地 Caffeine 缓存,最多 5000 条,10分钟过期
    private final Cache<String, String> l1Cache = Caffeine.newBuilder()
            .maximumSize(5000)
            .expireAfterWrite(10, TimeUnit.MINUTES)
            .recordStats()   // 开启命中率统计
            .build();

    @Autowired
    private StringRedisTemplate redisTemplate;

    private static final Duration L2_TTL = Duration.ofHours(2);
    private static final String KEY_PREFIX = "llm:chat:";

    /**
     * 读取:L1 → L2 → Loader(LLM调用)
     * Cache-Aside 模式,找不到就调loader并回写
     */
    public String get(String cacheKey,
                        Supplier<String> loader) {
        // 1. 查 L1
        String val = l1Cache.getIfPresent(cacheKey);
        if (val != null) {
            Metrics.counter("cache.hit", "layer", "L1").increment();
            return val;
        }

        // 2. 查 L2(Redis)
        String redisKey = KEY_PREFIX + cacheKey;
        val = redisTemplate.opsForValue().get(redisKey);
        if (val != null) {
            Metrics.counter("cache.hit", "layer", "L2").increment();
            l1Cache.put(cacheKey, val);  // 回填 L1
            return val;
        }

        // 3. L1/L2 都 MISS:调用 LLM(兜底)
        Metrics.counter("cache.miss").increment();
        val = loader.get();

        // 4. 异步回写 L1 + L2,不阻塞主链路
        String finalVal = val;
        CompletableFuture.runAsync(() -> {
            redisTemplate.opsForValue().set(redisKey, finalVal, L2_TTL);
            l1Cache.put(cacheKey, finalVal);
        });
        return val;
    }

    /** 主动失效(知识库更新时调用)*/
    public void evict(String cacheKey) {
        l1Cache.invalidate(cacheKey);
        redisTemplate.delete(KEY_PREFIX + cacheKey);
    }

    /** 暴露 L1 命中率给监控 */
    public CacheStats l1Stats() { return l1Cache.stats(); }
}
设计要点:异步回写(CompletableFuture.runAsync)避免 LLM 响应链路被 Redis 写操作拖慢。生产环境中建议用独立线程池隔离,防止 Redis 慢查询影响主线程。
关键代码片段 · 02

L3 语义缓存:向量相似度命中

核心思路:将用户问题 Embedding 成向量,存入 pgvector;新请求来了,先做 ANN(近似最近邻)检索,相似度超过阈值则直接返回历史答案。

SemanticCacheService.java
@Service
public class SemanticCacheService {

    @Autowired private EmbeddingModel  embeddingModel;
    @Autowired private JdbcTemplate    jdbc;  // pgvector

    // 相似度阈值:越高越严格,建议 0.92~0.95
    private static final double SIMILARITY_THRESHOLD = 0.93;
    // 缓存 TTL:AI 生成内容有时效性
    private static final Duration CACHE_TTL = Duration.ofHours(6);

    public Optional<String> lookup(String question) {
        // 1. 将问题向量化
        float[] qVec = embeddingModel.embed(question).toFloatArray();

        // 2. 使用 pgvector 余弦相似度(<=> 表示 cosine distance)
        var sql = """
            SELECT answer, (1 - (embedding <=> ?::vector)) AS similarity
            FROM semantic_cache
            WHERE created_at > NOW() - INTERVAL '6 hours'
              AND (1 - (embedding <=> ?::vector)) >= ?
            ORDER BY similarity DESC
            LIMIT 1
            """;

        return jdbc.query(sql,
                (rs, n) -> rs.getString("answer"),
                toPgArray(qVec), toPgArray(qVec),
                SIMILARITY_THRESHOLD
        ).stream().findFirst();
    }

    public void store(String question, String answer) {
        float[] vec = embeddingModel.embed(question).toFloatArray();
        jdbc.update("""
            INSERT INTO semantic_cache (question, embedding, answer)
            VALUES (?, ?::vector, ?)
            ON CONFLICT DO NOTHING
            """,
            question, toPgArray(vec), answer);
    }

    /** 超参数自适应:根据历史精准度自动调阈值 */
    @Scheduled(cron = "0 0 3 * * *")
    public void autoTuneThreshold() {
        // 统计最近7天的"误命中率",超过 5% 则上调阈值
        // 低于 1% 则适当下调,扩大命中范围
        // 实现略,可结合用户反馈表实现监督式调优
    }

    private String toPgArray(float[] arr) {
        // float[] → "[0.12,0.34,...]" pgvector字面量
        StringBuilder sb = new StringBuilder("[");
        for (int i = 0; i < arr.length; i++) {
            if (i > 0) sb.append(',');
            sb.append(arr[i]);
        }
        return sb.append(']').toString();
    }
}
⚠️ 阈值是灵魂:0.93 看起来像个随意的数字,但背后是 P-R 曲线的权衡。阈值过低(如 0.8)会导致"茅台今年营收多少"命中"茅台明年预期多少",答非所问。面试中主动提出"需要基于线上 A/B 实验调优阈值",是加分点。

pgvector 建表 DDL

schema.sql
-- 安装扩展
CREATE EXTENSION IF NOT EXISTS vector;

CREATE TABLE semantic_cache (
    id          BIGSERIAL PRIMARY KEY,
    question    TEXT NOT NULL,
    embedding   vector(1536),           -- text-embedding-3-small 维度
    answer      TEXT NOT NULL,
    created_at  TIMESTAMPTZ DEFAULT NOW(),
    hit_count   INT DEFAULT 0
);

-- HNSW 索引:高召回率 ANN 搜索(pgvector 0.5+)
CREATE INDEX idx_semantic_embedding
    ON semantic_cache
    USING hnsw (embedding vector_cosine_ops)
    WITH (m = 16, ef_construction = 64);

-- 定时清理超期缓存(避免无限膨胀)
DELETE FROM semantic_cache
WHERE created_at < NOW() - INTERVAL '7 days';
关键代码片段 · 03

AI 场景三大缓存故障:击穿 / 穿透 / 雪崩

场景一:缓存击穿(热点问题过期)

某个超热问题(如"DeepSeek 怎么用")突然 TTL 到期,大量并发请求同时打到 LLM,Token 费用瞬间暴增。

CacheBreakdownProtector.java — 分布式互斥锁(Redis SetNX)
public String getWithMutex(String key, Supplier<String> loader) {
    String val = redisTemplate.opsForValue().get(key);
    if (val != null) return val;

    String lockKey = "lock:" + key;
    boolean locked = Boolean.TRUE.equals(
        redisTemplate.opsForValue().setIfAbsent(lockKey, "1",
            Duration.ofSeconds(30)));   // 30s 自动释放,防死锁

    if (locked) {
        try {
            // 获锁成功:调 LLM,写缓存
            String result = loader.get();
            redisTemplate.opsForValue().set(key, result, Duration.ofHours(2));
            return result;
        } finally {
            redisTemplate.delete(lockKey);
        }
    } else {
        // 未获锁:短暂等待后重试(避免忙等)
        LockSupport.parkNanos(Duration.ofMillis(50).toNanos());
        return getWithMutex(key, loader);  // 递归重试
    }
}

场景二:缓存穿透(无意义的问题)

恶意用户发送大量随机问题,全部 MISS,每次都打到 LLM。解法:布隆过滤器 + 空值缓存双保险。

CachePenetrationGuard.java — Bloom Filter 预过滤
// Guava BloomFilter 预热合法问题指纹
private final BloomFilter<String> bloomFilter =
    BloomFilter.create(
        Funnels.stringFunnel(Charsets.UTF_8),
        1_000_000,   // 预期100万条
        0.001        // 误判率 0.1%
    );

public String safeGet(String question, Supplier<String> loader) {
    // Bloom 未命中:问题从未出现过,直接拒绝或返回默认回复
    if (!bloomFilter.mightContain(question)) {
        return "对不起,暂时无法回答该问题";
    }

    String val = redis.get(question);
    if (val != null) {
        // 缓存了空值(之前LLM也不知道答案)
        if ("NULL".equals(val)) return "暂无答案";
        return val;
    }

    String result = loader.get();
    // 即使是空答案也缓存,防止重复穿透,TTL 短一些
    redis.set(question, result != null ? result : "NULL",
               result != null ? Duration.ofHours(2) : Duration.ofMinutes(5));
    bloomFilter.put(question);  // 登记新问题
    return result;
}

场景三:缓存雪崩(批量 TTL 同时过期)

问题本质:系统启动时批量预热 100 万条缓存,TTL 全部设为 2 小时,2 小时后集体过期,LLM 调用量瞬间 100× 暴涨。
解法三板斧:
  1. TTL 随机抖动TTL = 基础时长 + random(0, 30min),打散过期时间
  2. 热点永不过期:Top 1000 热点问题不设 TTL,知识库更新时主动 evict
  3. Refresh-Ahead 提前刷新:TTL 剩余 20% 时异步触发刷新,不等真正过期
TTL 随机抖动示例
private Duration jitterTTL(Duration base) {
    // 基础TTL ± 30分钟随机抖动
    long jitter = ThreadLocalRandom.current().nextLong(
        -30 * 60, 30 * 60);
    return base.plusSeconds(jitter).abs();
}
关键代码片段 · 04

串联三层缓存:完整的 ChatService

AiChatService.java — 三层缓存主链路
@Service
public class AiChatService {

    @Autowired private TieredCacheService   tieredCache;   // L1+L2
    @Autowired private SemanticCacheService  semanticCache; // L3
    @Autowired private ChatClient            chatClient;    // Spring AI
    @Autowired private MeterRegistry         metrics;

    public String chat(String userId, String question) {
        // 生成精确 key(含用户维度隔离)
        String exactKey = "u:" + userId + ":q:"
            + DigestUtils.md5DigestAsHex(question.getBytes());

        // 1. L1 + L2 精确命中(毫秒级)
        String cached = tieredCache.get(exactKey, () -> {
            // 2. L3 语义命中(10~30ms)
            Optional<String> semanticHit = semanticCache.lookup(question);
            if (semanticHit.isPresent()) {
                metrics.counter("cache.hit", "layer", "L3").increment();
                return semanticHit.get();
            }

            // 3. 全部 MISS:调用 LLM
            metrics.counter("llm.call").increment();
            String answer = chatClient.prompt()
                    .user(question)
                    .call()
                    .content();

            // 4. 异步写入 L3 语义缓存
            CompletableFuture.runAsync(() ->
                semanticCache.store(question, answer));

            return answer;
        });

        return cached;
    }
}
加分项提示

这些细节让你与众不同

🎯
Caffeine 弱引用模式
softValues() 替代 maximumSize,JVM 内存压力大时自动驱逐,无需手动调 size,更适合容器化部署
📊
多维命中率大盘
分别埋点 L1/L2/L3 命中率,结合 Micrometer + Grafana 看分层效果,可动态调整各层 TTL 和容量
💾
Redis 序列化选型
LLM 文本响应用 String 序列化;结构化对象用 Kryo/Protobuf,比 Java 默认序列化体积小 5~10×,内存省、网络快
🔄
一致性哈希分片
Redis Cluster 扩容时用一致性哈希(Redisson / Lettuce Cluster),最小化缓存迁移量,避免扩容导致命中率断崖式下跌
Pipeline 批量操作
多轮对话历史批量读 Redis,用 Pipeline 打包一次网络往返,延迟从 N×RTT 降为 1×RTT
🧹
向量缓存老化清洗
知识库版本更新后,通过 metadataFilter 批量失效旧版本的语义缓存条目,避免脏数据污染新知识库答案
🏆 高级追问:如何防止语义缓存中的"时效性问题"?
例如"今天 A 股涨了多少"这类与时间强相关的问题,不应进入语义缓存,否则昨天的答案会命中今天的问题。

解法:在 Embedding 之前做意图分类(时效型 vs 知识型),时效型问题绕过语义缓存直接调 LLM,知识型问题才走 L3。这一点 90% 候选人答不出来。
高频追问速查

面试官还会怎么追问?

  • Q1
    L1 和 L2 如何保持一致性?节点重启怎么处理?
    L1 是进程级缓存,服务重启后 L1 清空,此时请求打到 L2(Redis),随着请求进来逐步回填 L1——这是"懒加载"式一致性。如需快速预热,可在启动时从 Redis 热点 Key 批量 warmup 到 L1(Caffeine putAll)。
  • Q2
    多实例部署时 L1 缓存不一致怎么办?
    L1 只做读加速,不保证多节点一致性。对一致性要求高的数据(如会话状态)不放 L1,只放 L2(Redis)。对一致性要求低的热点知识(TTL 10min 以内可接受误差),L1 各自独立,过期自动同步。
  • Q3
    语义缓存的 Embedding 模型换了怎么迁移?
    必须全量重建索引。工程上的做法:新旧模型并行运行一段时间,逐步将 semantic_cache 表中的 embedding 字段用新模型更新;或者新建一张 semantic_cache_v2,双写切流量,确认无误后切换。
  • Q4
    Spring Cache 注解(@Cacheable)和手动缓存选哪个?
    @Cacheable 适合简单场景,不支持多层缓存联动和语义缓存。AI 场景建议手动管理,更灵活:可以控制回填时机(异步 vs 同步)、阈值调优、分层策略。@Cacheable 的 CacheManager 也可以接 Caffeine,但 L3 语义层必须手写。
  • Q5
    如何衡量缓存方案的投资回报率(ROI)?
    核心指标:(LLM调用减少量 × 单次Token费用)÷(Redis + pgvector 运维成本 + 开发人天)。命中率每提升 10%,每月节省费用可量化为具体金额,向面试官展示成本意识是 P7+ 的加分项。
总结

面试答题思路速记

这道题考的不是"你用过 Redis 没",而是你对 AI 工程成本的认知和分层设计能力。

  • 先说三层架构(L1 Caffeine / L2 Redis / L3 语义缓存),体现分层思维
  • 明确 Cache-Aside 是 LLM 场景首选,说出为什么(Immutable Response 无更新语义)
  • 三大故障逐一说解法:击穿→互斥锁,穿透→布隆+空值,雪崩→TTL 抖动+热点永不过期
  • 语义缓存要提相似度阈值、时效性意图过滤两个深度点
  • 最后量化 ROI,体现业务感知:命中率 × Token 单价 = 每月节省费用
📌 加分一句话:在 LLM 场景,缓存不只是性能优化,更是成本控制的核心手段。设计缓存架构时,我会先建立命中率目标(比如综合命中率 ≥ 60%),倒推各层 TTL 和容量,再结合线上指标持续调优。
基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-06-26 21:55:21 HTTP/1.1 GET : https://www.yeyulingfeng.com/a/801960.html
  2. 运行时间 : 0.213121s [ 吞吐率:4.69req/s ] 内存消耗:4,961.04kb 文件加载:145
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=48338f1c9ff00ba5e57e52b898348470
  1. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_static.php ( 6.05 KB )
  7. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/ralouphie/getallheaders/src/getallheaders.php ( 1.60 KB )
  10. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  11. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  12. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  13. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  14. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  15. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  16. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  17. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  18. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  19. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions_include.php ( 0.16 KB )
  21. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions.php ( 5.54 KB )
  22. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  23. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  24. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  25. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/provider.php ( 0.19 KB )
  26. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  27. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  28. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  29. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/common.php ( 0.03 KB )
  30. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  32. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/alipay.php ( 3.59 KB )
  33. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  34. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/app.php ( 0.95 KB )
  35. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cache.php ( 0.78 KB )
  36. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/console.php ( 0.23 KB )
  37. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cookie.php ( 0.56 KB )
  38. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/database.php ( 2.48 KB )
  39. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/filesystem.php ( 0.61 KB )
  40. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/lang.php ( 0.91 KB )
  41. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/log.php ( 1.35 KB )
  42. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/middleware.php ( 0.19 KB )
  43. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/route.php ( 1.89 KB )
  44. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/session.php ( 0.57 KB )
  45. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/trace.php ( 0.34 KB )
  46. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/view.php ( 0.82 KB )
  47. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/event.php ( 0.25 KB )
  48. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  49. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/service.php ( 0.13 KB )
  50. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/AppService.php ( 0.26 KB )
  51. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  52. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  53. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  54. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  55. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  56. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/services.php ( 0.14 KB )
  57. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  58. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  59. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  60. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  61. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  62. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  63. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  64. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  65. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  66. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  67. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  68. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  69. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  70. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  71. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  72. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  73. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  74. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  75. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  76. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  77. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  78. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  79. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  80. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  81. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  82. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  83. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  84. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  85. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  86. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  87. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/Request.php ( 0.09 KB )
  88. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  89. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/middleware.php ( 0.25 KB )
  90. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  91. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  92. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  93. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  94. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  95. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  96. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  97. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  98. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  99. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  100. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  101. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  102. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  103. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/route/app.php ( 3.94 KB )
  104. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  105. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  106. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Index.php ( 9.87 KB )
  108. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/BaseController.php ( 2.05 KB )
  109. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  110. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  111. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  112. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  113. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  114. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  115. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  116. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  117. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  118. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  119. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  120. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  121. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  122. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  123. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  124. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  125. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  126. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  127. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  128. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  129. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  130. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  131. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  132. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  133. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  134. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  135. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Es.php ( 3.30 KB )
  136. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  137. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  138. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  139. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  140. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  141. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  142. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  143. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  144. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/runtime/temp/c935550e3e8a3a4c27dd94e439343fdf.php ( 31.50 KB )
  145. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000508s ] mysql:host=127.0.0.1;port=3306;dbname=wenku;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000882s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000328s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000284s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000580s ]
  6. SELECT * FROM `set` [ RunTime:0.000233s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000705s ]
  8. SELECT * FROM `article` WHERE `id` = 801960 LIMIT 1 [ RunTime:0.005106s ]
  9. UPDATE `article` SET `lasttime` = 1782482121 WHERE `id` = 801960 [ RunTime:0.013946s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.000297s ]
  11. SELECT * FROM `article` WHERE `id` < 801960 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000591s ]
  12. SELECT * FROM `article` WHERE `id` > 801960 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000356s ]
  13. SELECT * FROM `article` WHERE `id` < 801960 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.003739s ]
  14. SELECT * FROM `article` WHERE `id` < 801960 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.020973s ]
  15. SELECT * FROM `article` WHERE `id` < 801960 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.041021s ]
0.214839s