You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Fat-Free Framework中Redis缓存数组添加值后跨请求失效问题

问题原因及解决方案

核心原因

问题出在F3的缓存操作未将修改后的数组同步回Redis,具体细节:

  1. 调用$this->f3->get("API_CALLS")时,F3会把Redis中的缓存数据加载到当前请求的内存容器(Hive)中;
  2. $this->f3->push("API_CALLS", $api_log)仅修改了内存中的数组副本,并没有自动将更新后的数组重新写入Redis;
  3. 当前请求结束后,内存中的Hive数据会被销毁,新请求从Redis读取的还是最初设置的空数组,因此看不到之前添加的日志。

简单说:你只修改了本地内存里的临时数据,没把更新结果存回Redis这个持久化缓存里。

修复代码

修改cache方法,确保修改数组后显式同步回Redis:

public function cache($url, $body, $response)
{
    // 从Redis读取缓存,不存在则初始化空数组
    $apiCalls = $this->f3->get('API_CALLS') ?: [];

    $createdAt = date("Y-m-d H:i:s");
    $api_log = json_encode([
        'url' => $url,
        'body' => $body,
        'response' => $response,
        'createdAt' => $createdAt
    ]);

    // 修改数组
    array_push($apiCalls, $api_log);
    // 将更新后的数组重新写入Redis缓存
    $this->f3->set('API_CALLS', $apiCalls, 86400);

    die(var_export($this->f3->get("API_CALLS"), true));
}

补充说明

F3的Hive(内存容器)和外部缓存(Redis)是两个独立存储层:

  • Hive是请求级临时存储,仅在当前请求生命周期内有效;
  • 外部缓存是跨请求持久化存储,修改后必须显式调用set方法回写,才能让其他请求读取到更新后的数据。

内容的提问来源于stack exchange,提问作者Ali Habieb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 23:54:29