Vagrant에 redis를 설치하고 FuelPHP에서 cache 사용

Vagrant에 redis를 설치하고 FuelPHP에서 cache 사용

2022-10-05 last update

14 minutes reading FuelPHP Redis Vagrant
지난번 FuelPHP에서 Welcome 페이지 참조까지 했습니다. 이번은, cache 기구에 Redis 를 사용해 보고 싶었으므로, 기본적인 것입니다만, MacBookAir 의 Vagrant 내에서 검증해 보았습니다.

구축할 환경


  • OSX 10.9.5
  • Vagrant
  • CentOS 6.5
  • FuelPHP 1.7.2
  • Redis server 2.4.10
  • Redis-cli 2.4.10

  • 참고: 마지막



    지난번 Welcome 페이지까지 설정한 환경의 연속으로 실행하고 있습니다.
    Mac에서 Vagrant를 사용하여 CentOS에 FuelPHP 설정

    참고:Redis 주위



    Redis의 설치와 조작은 아래를 참고로 했습니다.
    CentOS-6.5로 redis 서버 구축
    FuelPHP 캐시 라이브러리 – redis

    참고: 일본어 FuelPHP 문서



    Cache
    Redis

    우선 Redis 설치



    vagrant 내에서의 커멘드이므로, 모두 [vagrant]로서 커멘드 라인을 표현하고 있습니다.
    [vagrant] yum --enablerepo=epel install redis
    ...
    ...
    Complete!

    특히 위화감없이 설치되었습니다.
    이제 Redis 서버를 시작합니다.
    [vagrant] /etc/init.d/redis start
    Starting redis-server:                                     [  OK  ]
    

    다음으로 버전을 확인해 보겠습니다. 우선은 server 의 버젼.
    [vagrant] redis-server -v
    Redis server version 2.4.10 (00000000:0)
    

    다음으로 client 버전
    [vagrant] redis-cli -v
    redis-cli 2.4.10
    

    다음으로 동작 확인을 합니다. client를 시작하고 간단하게 확인합니다.
    [vagrant] redis-cli
    redis 127.0.0.1:6379>
    redis 127.0.0.1:6379> set hoge 'foo'
    OK
    redis 127.0.0.1:6379> get hoge
    "foo"
    

    설정한 데이터를 얻을 수 있기 때문에 문제 없을 것 같습니다.
    일단 설정한 데이터를 모두 클리어해 둡시다.
    [vagrant] redis-cli
    redis 127.0.0.1:6379> flushall
    OK
    redis 127.0.0.1:6379> get hoge
    (nil)
    

    이것으로 클리어가 완료되었습니다.

    FuelPHP 준비



    다음 파일을 준비합니다.
  • Controller
  • app/classes/controller/redis.php

  • View
  • app/views/cache/redis.php

  • 사용할 클래스
  • app/classes/object.php


  • app/classes/controller/redis.php
    <?php
    
    class Controller_Redis extends \Fuel\Core\Controller
    {
        public function action_index()
        {
            // string
            Cache::set('string', 'cache test' . Date::time());
            $data['string'] = Cache::get('string');
    
            // Array
            $arr = array(
                1,
                2,
                array(
                    'key'   => 'value',
                    'key2'  => 'value2',
                    'time'  => Date::time(),
                )
            );
            Cache::set('array', $arr);
            $data['array'] = Cache::get('array');
    
            // Object
            $obj = new Object();
            Cache::set('object', $obj);
            $data['object'] = Cache::get('object');
    
            return Response::forge(View::forge('cache/redis', $data));
        }
    }
    

    app/views/cache/redis.php
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title>Cache: Redis</title>
    </head>
    <body>
    <p>Cache: Redis</p>
    <div>String:<?php var_export($string) ?></div>
    <div>Array :<?php var_export($array) ?></div>
    <div>Class :<?php var_export($object) ?></div>
    </body>
    </html>
    

    app/classes/object.php
    <?php
    
    class Object
    {
        public static function _init()
        {
        }
    
        public function __toString()
        {
            return 'Object';
        }
    }
    

    이것으로 준비 완료입니다.

    FuelPHP에서 cache 세트 및 확인



    그렇다면 방문해 보겠습니다. htp://192.168.33.01/레오s (IP는 vagrant의 각자 설정을 따릅니다.)


    세트한 String, Array, Object 가 표시되고 있으면 성공입니다.

    Redis cache를 지우고 cache 만 참조



    여기서 cache에 액세스할 수 없는 경우를 살펴보겠습니다. 다음 파일을 준비합니다.
  • Controller
  • app/classes/controller/redis2.php


  • app/classes/controller/redis2.php
    <?php
    
    class Controller_Redis2 extends \Fuel\Core\Controller
    {
        public function action_index()
        {
            try{
                $data['string'] = Cache::get('string');
            }
            catch (\CacheNotFoundException $e) {
                $data['string'] = 'none string';
            }
    
            try{
                $data['array'] = Cache::get('array');
            }
            catch (\CacheNotFoundException $e) {
                $data['array'] = 'none array';
            }
    
            try{
                $data['object'] = Cache::get('object');
            }
            catch (\CacheNotFoundException $e) {
                $data['object'] = 'none object';
            }
    
            return Response::forge(View::forge('cache/redis', $data));
        }
    }
    

    캐시를 검색할 수 없는 경우 CacheNotFoundException Exception이 발급되므로 여기에서 추가 처리를 수행합니다.

    이 상태에서 htp://192.168.33.01/레오 s2에 액세스하면 이전과 같은 결과가 표시됩니다.

    이제 한 번 Redis의 내용을 지웁시다.
    [vagrant] redis-cli
    redis 127.0.0.1:6379> flushall
    OK
    redis 127.0.0.1:6379> get hoge
    (nil)
    

    그리고 다시 htp://192.168.33.01/레오 s2 에 액세스 하면 다음과 같은 결과가 됩니다.


    요약



    지금까지 Redis 설치에서 FuelPHP로 작업하는 방법을 조금 시도했습니다. 매우 쉽게 시도 할 수있었습니다. 특히 위화감 없이 이용할 수 있는 것이 정말로 믿음직한 곳입니다.

    프로덕션에서 사용할 때는 서비스 규모에 따라 다르지만 AWS ElasticCache( ElastiCache의 Redis 클러스터에 백업 및 복원 기능 추가 )를 사용하는 것일까요?

    cache 의 설계와 이용을 효율적으로 실시해, 서비스의 퍼포먼스를 향상시키고 싶네요.