본문 바로가기

Server

Redis + Laravel

반응형

Laravel은 Redis를 캐싱 용도와 브로드캐스팅 용도, 두 용도로 모두 활용할 수 있도록 기능을 지원하고 있는데요.

 

 

이번 글에서는 Laravel에서 캐싱 용도로 Redis 서버를 이용하는 방법에 대해 차근차근 알아보겠습니다.

 

 

 

Redis를 설치하는 방법에서는 이번 글에서 다루지 않으니 제가 참고한 사이트를 참고해주세요!

https://blog.logger.one/entry/CentOS-Ubuntu-%EC%97%90-Redis-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0

 

Linux (CentOS, Ubuntu 등) 에 Redis 설치하기

여기서는 간단히 Redis Stable 버전을 받아서 설치하는 방법을 알아보겠습니다. (패키지 매니저를 사용하지 않고...) 1. Redis 다운로드 우선 Redis 페이지로 이동하여 Redis Stable 버전을 다운 받도록 합

blog.logger.one

 

1. predis/predis 설치

composer require predis/predis

composer 를 통해 laravel에서 redis를 이용할 때 필수적으로 필요한 predis 모듈을 설치합니다.

 

 

2. 설정 파일 편집하기

config/database.php와 .env 파일을 설치한 redis서버 설정에 맞춰 편집합니다.

 

 

// config/database.php

'redis' => [

        'client' => env('REDIS_CLIENT', 'predis'),

		...

        'default' => [
            'host' => env('REDIS_HOST', 'localhost'),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_PORT', 6379),
            'database' => 0,
            'read_timeout' => 3600,
        ],

		...

    ],

저는 'default' 부분은 따로 변경한 점이 없습니다! 'client => ' 의 설정이 'phpredis'로 되어 있으신 분들은 'predis'로 바꿔주시면 됩니다.

 

// .env 

REDIS_HOST=127.0.0.1
REDIS_PASSWORD= //비밀번호
REDIS_PORT=6379 //포트번호

 .env에서 제가 설정한 비밀번호와 포트번호를 적어주었습니다.

 

 

3. Laravel Redis 파사드 이용

그럼 이제 Laravel의 파사드를 이용해 Redis 서버에 사전에 연동해둔 DB의 데이터를 저장해보겠습니다.

 

php artisan make:controller Counters 

명령어를 이용해 Counters 컨트롤러를 생성해주었습니다.

 

// app/Http/Controllers/Counters.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
//연동된 DB를 사용하기 위한 파사드 입니다.
use Illuminate\Support\Facades\Redis;
//연동된 Redis를 사용하기 위한 파사드 입니다.

class Counters extends Controller
{

  public function main_count()
  {

    $vod_count = Redis::get('vod_count');
    //Redis에 'vod_count' key가 있는지 확인합니다.
    
    if( !$vod_count ){ // 'vod_count' key가 없다면
      $vod_count = DB::connection('mysql-manager')
                  ->table('test1')
                  ->count(); 
	// 'mysql-manager' DB에 접속하여 'test1'테이블의 레코드 수를 계산하는 쿼리를 실행하고 $vod_count에 저장합니다. 
      Redis::set('vod_count',$vod_count);
      //$vod_count에 저장된 값을 'vod_count' 키의 값으로 저장합니다.
      Redis::expire('vod_count',60*30);
      //'vod_count'키는 60*30(1800초 = 30분) 후에 폐기됩니다.
    }

	/*
    처음 실행시에는 이 부분에 
    	Redis::set('vod_count',$vod_count);
      	Redis::expire('vod_count',60*30);
    코드를 넣어주어 키를 최초 생성해주어야 합니다.
    
    추후 유지시에는 위의 반복문만으로 키의 생성과 폐기가 반복적으로 이루어집니다.
    */
    
      return view('pages.initial')
      -> with('vod_count', $vod_count);
      // initial.blade.php 뷰 파일을 열 때 $vod_count값을 같이 넘겨줍니다.
      // $vod_count값은 30분마다 쿼리로 인해 값이 갱신됩니다. 
      //새로고침 안하면??!?
  }

}

 

 

initial.blade.php 에서는 간단하게 라라벨 블레이드 문법을 활용해 {{ $vod_count }} 를 적어주면 값을 불러올 수 있습니다.

<div style="margin: 20px; font-size: 20px;">
현재 변환중인 영상 <br />
{{  $vod_count }} 개
</div>

저는 이런 식으로 활용했습니다.

 

 

route도 설정해줍니다.

// routes/web.php

Route::get('/', [Counters::class, 'main_count']);

Counters 컨트롤러의 main_count 함수를 사용한다고 알려줍니다.

 

 

 

그리고 화면을 확인하면,,!

 

다음과 같이 결과값이 화면에 잘 출력 되는 모습을 확인하실 수

있습니다.

 

 

 

 

 

 

 

 

(+) Medis를 이용해 Redis 서버 관리

Mac사용자는 저렴한 가격에 Redis 서버를 관리해주는 GUI툴인 Medis를 사용하실 수 있습니다.

 

앱스토어에서 6000원 정도의 값을 지불 후 설치하면 다음과 같은 화면을 보실 수 있습니다.

저는 개발 서버위에 로컬로 설치한 Redis 서버를 이용중이므로

Redis Host는 localhost로, Port와 Password는 제가 설정한 값을 적어주었습니다.

 

SSH설정은 본인 서버의 정보들을 적어주시면 됩니다.

 

접속이 안된다면 Redis 서버의

1. 패스워드 설정을 했는지, 

2. 외부 접속이 허용되도록 bind 0.0.0.0를 설정해주었는지 

를 체크해주시기 바랍니다.

 

 

 

올바르게 정보를 입력하고 Connect 버튼을 누르면,

다음과 같은 화면을 볼 수 있습니다. 왼쪽엔 key 목록이 있고 목록을 클릭하면 연결된 value를 확인하실 수 있습니다.

 

라라벨에서 key이름을 'vod_count'로 지정해주었었는데 라라벨에서 실행이 되면 자동으로 key name에 prefix로 'laravel_database_'가 붙게 됩니다. 터미널을 사용할 때에는 이 점을 주의해주시기 바랍니다.

 

 

 

이번 포스팅에서는 Laravel과 Redis를 연동하여 값을 캐싱하는 방법에 대해 알아보았습니다.

반응형