2015-10-03 166 views
0

我試圖在我的Laravel應用中實現一個非常基本的緩存機制。Laravel 5.1 Redis緩存

我安裝了Redis,通過終端(src/redis-server)啓動它,並在Laravel的配置文件中將緩存從文件更改爲redis,但是當我使用緩存時,它比常規查詢需要更長時間(1s vs 2s)。

我在這裏錯過了什麼嗎?我只想緩存10分鐘的查詢。

這裏是我的FeedController.php

namespace App\Http\Controllers\Frontend\Feed; 

use Illuminate\Http\Request; 
use Auth; 
use App\Http\Requests; 
use App\Http\Controllers\Controller; 
use App\Models\Company; 
use Redis; 
use Cache; 


class FeedController extends Controller 
{ 

    public function index() 
    { 

     if (Cache::has('companies')) { 
      // cache exists. 
      $companies = Cache::get("companies"); 
     } else { 
      // cache doesn't exist, create a new one 
      $companies = Cache::remember("companies",10, function() { 
       return Company::all(); 
      }); 

      Cache::put("companies", $companies, 10); 
     } 


     return view('index')->with('companies', $companies) 
    } 

我的觀點

@foreach($companies as $company) 
    {{$company->name}} 
@endforeach 

回答

2

首先,緩存並不總是快。其次,你正在檢查緩存。

你可以使用:

$companies = Cache::remember("companies",10, function() { 
      return Company::all(); 
     }); 

它檢查緩存項的存在,如果不將執行關閉,並在指定的鍵緩存結果。緩存:擁有if/else是不必要的,只會減慢速度。

+0

我是redis noob,謹慎解釋爲什麼緩存不總是更快? –

+0

想象下面的情況: $ data = Cache :: remember('data',10,function(){ return [1,2,3,4]; }); 這是一個極端的例子,但在PHP中生成數組的速度要快於從緩存中獲取數組。你應該總是考慮何時使用它。 當MySQL配置正確時,從MySQL獲取項目更容易,速度更快,可靠性更高。特別是在簡單的查詢。 當性能成爲問題時,您應該使用緩存,在此之前,請不要打擾。 –