返回介绍

2.5 请求缓存

发布于 2020-10-05 11:38:12 字数 5273 浏览 816 评论 0 收藏 0

实现原理

实现参考『Thikphp 3.2-静态缓存』, 静态缓存只能提供HTML的缓存且只能以文件形式进行缓存。而请求缓存,支持ajax/html的缓存,而且可以根据缓存配置自行切换文件/redis的缓存

缓存检测:

行为app_begin时,检测路由是否需要有缓存,有则返回缓存内容(\Common\Behavior\ReadRequestCacheBehavior)

缓存更新:

行为ajax_return/view_filter时,更换请求的缓存内容(\Common\Behavior\WriteRequestCacheBehavior)

使用指南

1、开启配置app/Application/Common/config.php

    // 请求缓存
    'REQUEST_CACHE_ON'    => true, // 开启静态缓存
    'REQUEST_CACHE_TIME'  => 30*60,   // 全局静态缓存有效期(秒)
    // 定义静态缓存规则 ['路由规则'  =>  ['expire'=> 10, 'subscribe'=>['路由1','路由2']]],
    'REQUEST_CACHE_RULES' => array(
        'content/index/test'  => [
            'expire'    => 10000,
            'subscribe' => [ // 依赖test2/test3路由,当test2/test3缓存更新一次后,本路由也需要重新更新缓存
                'Content/Index/test2',
                'Content/Index/test3',
            ]
        ],
        'Content/Index/test2' => [
            'expire'    => 30,
            'subscribe' => []
        ],
        'content/index/test3' => [
            'expire'    => 30,
            'subscribe' => ['Content/Index/test2']
        ],
        'content/index/index' => [], // 最简单配置,默认 全局静态缓存有效期,不依赖其他路由
   ),

定义静态缓存规则

  • 路由规则:遵循module/controller/action
  • expire:过期时间
  • subscribe: 依赖配置。当依赖的路由缓存失效或更新后,此路由也需要重新更新缓存

2、Controller 必须继承自 Cms.class.php或其子类

// 正确
class MyController extends Base {}
class MyController extends AdminBase {}

// 错误
class MyController extends Controller {}

最佳实践

  • 开发调试时,不建议开启缓存
  • 把缓存的驱动改为redis,提升响应速度
  • 不建议一个路由同时处理GET/POST,否则缓存会异常,请保持一个路由一种请求方法

启示

保存缓存内容时,我们采用serialize而非json

serialize 优点

  • 体积更小
  • 序列化和反序列化性能更优,如下图

UhjrIf.png

参考链接:https://medium.com/@moinuddinchowdhury/serialize-vs-json-67fe872a7755

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文