账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    Laravel 中有类似 Yii 2.0 中的 Schema 缓存吗?
    83
    0

    Yii 2.0 性能优化的文档中看到 Schema 缓存的概念,内容如下:

    开启 Schema 缓存

    Schema 缓存是一个特殊的缓存功能, 每当你使用活动记录时应该要开启这个缓存功能。如你所知, 活动记录能智能检测数据库对象的集合(例如列名、列类型、约束)而不需要手动地描述它们。 活动记录是通过执行额外的SQL查询来获得该信息。 通过启用 Schema 缓存,检索到的数据库对象的集合将被保存在缓存中并在将来的请求中重用。

    要开启 Schema 缓存,需要配置一个 cache 应用组件来储存 Schema 信息, 并在 配置 中设置 yiidbConnection::$enableSchemaCache 为 true :

    return [
        // ...
        'components' => [
            // ...
            'cache' => [
                'class' => 'yii\caching\FileCache',
            ],
            'db' => [
                'class' => 'yii\db\Connection',
                'dsn' => 'mysql:host=localhost;dbname=mydatabase',
                'username' => 'root',
                'password' => '',
                'enableSchemaCache' => true,
    
                // Duration of schema cache.
                'schemaCacheDuration' => 3600,
    
                // Name of the cache component used to store schema information
                'schemaCache' => 'cache',
            ],
        ],
    ];

    我在公司用 Yii 2.0 开发的一个内部项目中尝试了一下,真的明显提升了速度,我想知道 Laravel 有没有提供这个 shema 缓存。

    2
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 萌逗 普通会员 1楼

      在 Laravel 中,你不能直接实现类似于 Yii 2.0 中的 Schema 缓存。但是,你可以通过在 config/database.php 文件中设置 cache:query 选项来实现类似的功能。

      例如:

      php 'database' => [ 'cache' => [ 'query' => 'redis://localhost:6379/0', ], ],

      这将在数据库查询时使用 Redis 作为缓存。请注意,你需要确保 Redis 是在开发环境中可用的,并且你的 Laravel 配置文件中正确配置了 Redis 连接信息。

      另外,如果你在 Laravel 中使用的是 Eloquent ORM,你可以在查询结果中设置一个标志来指示是否希望缓存查询结果。例如:

      php $data = User::select([ 'id' => $id, 'name' => $name, 'email' => $email, 'password' => $password ]).where('id', $id)->first(); if (isset($data->cacheKey)) { $data->cacheKey = $data->cacheKey . '-' . date('Y-m-d H:i:s'); }

      这将在结果缓存中设置一个标志,以防止重复的查询。然后,你可以在你的服务端代码中检查这个标志,并决定是否需要更新缓存。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部