【问题标题】:Caching Vs. Query Directly from Database in Laravel缓存与。在 Laravel 中直接从数据库中查询
【发布时间】:2016-05-12 19:31:35
【问题描述】:

直接从数据库查询

Route::get('/users', function() {
    $user = User::all();
    return $users; 
});

缓存

Route::get('/users', function() {
    $users = User::all();
    Cache::put('users',$user,60);
    if(Cache::has('users')){
        return Cache::get('users');
    }
});

结果

在页面加载时在浏览器中比较这两者,我根本没有注意到有什么不同。

他们都返回了我数据库的用户列表

是否有任何工具/方式来展示它们的表现

【问题讨论】:

    标签: php mysql laravel caching laravel-5


    【解决方案1】:

    您可以在代码部分的开头和结尾使用microtime() 进行快速基准测试。

    $start = microtime();
    // code
    $end = microtime();
    // Log $end - $start here
    

    但是这些类型的查询对于缓存来说并不那么有价值,因为选择所有查询非常快。在进行复杂的数据库计算时,缓存项目更有价值。

    另外,在您的第二个示例中,您仍然通过执行Users:all 访问数据库,您需要在访问数据库之前返回缓存值。

    【讨论】:

      【解决方案2】:

      对于初学者来说,这不是缓存

      Route::get('/users', function() {
          $users = User::all();
          Cache::put('users',$user,60);
          if(Cache::has('users')){
              return Cache::get('users');
          }
      });
      

      您每次都在运行查询,然后每次都进行额外工作以将其放入缓存中。您已替换:

      database call
      

      与:

      database call
      save the results of the call to cache
      ask if cache has the key we just saved
      get key we just saved back from the cache
      

      你想做这样的事情:

      Route::get('/users', function() {
          return Cache::remember('users', 60, function() {
              return User::all();
          });
      });
      

      在这样一个简单的查询中,您可能不会注意到缓存的巨大差异,尤其是在只有几个测试用户的空载系统上。在繁重的数据库负载下,缓存对于繁重的查询(尤其是涉及联接/关系的内容)更为重要。

      【讨论】:

      • 但至少,我不必一直访问数据库。希望,它是一个更好的。你知道我应该阅读更多关于 laravel 缓存的链接吗?我刚开始,我什至不知道将它与memcache连接起来,甚至测试我的memcache。知道的请指教。
      • 关于缓存的 Laravel 文档非常好,并且给出了如何使用它们的各种示例。 laravel.com/docs/5.2/cache
      • 我也在那里,我猜,我看看错误的 Laravel 版本。我看到他们建议在数据库中创建一个表来存储缓存。我很困惑,目标不是尽量减少与数据库的对话吗?我错过了这里的任何逻辑吗?
      • Database / Memcached / Redis,我只需要设置其中之一吗?或(Database + Memcached)(Database + Redis)。随时向我提出任何建议。
      • @ihue 只有一个。根据我的经验,Redis 是最好的。
      【解决方案3】:

      在谈论浏览器性能时,您还可以查看优化查询。现在,您只需返回 User 模型上的所有可查看字段。如果您指定所需的字段,整体性能会随着查询的优化而提高。

      关于这一点,您很可能永远不会在生产中使用 all 方法,具体取决于您的应用程序的大小和您的流量状态。

      只是一些想法:D

      【讨论】:

      • 你知道如何用 laravel 设置 memcached / redis 吗?
      猜你喜欢
      • 2019-05-12
      • 1970-01-01
      • 2012-08-16
      • 2020-06-06
      • 1970-01-01
      • 2015-03-09
      • 1970-01-01
      • 1970-01-01
      • 2021-05-09
      相关资源
      最近更新 更多