본문 바로가기

laravel

cache 활용하기

laravel cache & EventServiceProvider

  1. 상황
  2. 해결책
  3. 코딩
1. 상황

캐쉬저장 데이타

  • 코드 데이타나 카테고리 데이타 같은 경우는 거의 바뀌지 않는다.
  • 그래서 캐쉬를 이용해서 데이타를 임시로 저장하는 경우가 많다.(캐쉬는 memory,file,redis등으로 활용할수 있다.)
  • 하지만 코드데이타나 카테고리 데이타는 중요하기 때문에 변경이 되면 바로 반영이 되어야한다.

캐쉬 데이타 불일치 문제

  • 기본적으로 캐쉬는 시간단위로 임시저장한다.1분,10분,60분등으로 처리한다.
  • 시간으로 저장하기 때문에 시간이 다가기 전엔 캐쉬데이타가 변경되지 않는다.
  • 이로 인해 데이타 불일치가 일어나거나 중요데이타가 바로 반영되지 않는 문제가 발생한다.
2.해결책
  • 캐쉬를 저장할때 키,밸류로 저장한다.
  • 중요데이타(코드데이타,카테고리데이타)등이 생성 수정되면 캐쉬를 삭제하면 된다.
  • 그러면 나중에 캐쉬를 읽어올때 기존제 캐쉬데이타가 없으므로 새로이 디비에서 데이타를 저장하기때문에 완벽하게 데이타 일치가 이뤄진다.
3.코딩

그럼 어떻게 laravel에서 적용할것인가?
laravel 5.1(LTS)기준이다.

  • 데이타를 읽어올때 캐쉬에서 읽어오도록 설정한다.

    public static function getAll() {
      return Cache::remember('CODE_ALL', 10, function () {
        return  Code::orderBy("name", "asc")
        ->get();
      });
    }
    

    위와 같이 하면 코드를 전체 읽어올때 캐쉬를 이용해서 CODE_ALL이라는 값이 있다면 캐쉬에서 바로 전송 없다면 디비에서 읽어서 캐쉬에 저장후 전송한다.
    단 10분이 지나면 캐쉬값은 expire되서 새로이 디비에서 읽어와서 전송한다.

  • Http/Providers/EventServiceProvider.php을 열어서 Code 값이 변경될때마다 캐쉬를 비워주는 기능을 넣어주면 된다.

    private function code() {
      Code::created(function ($notification) {
        Cache::forget('CODE_ALL');
      });
    
      Code::updated(function ($notification) {
        Cache::forget('CODE_ALL');
      });
    
      Code::deleted(function ($notification) {
        Cache::forget('CODE_ALL');
      });
    }
    

    위와 같이 코드가 생성,수정,삭제 될때 마다 캐쉬를 비워준다. 그러면 코드를 사용하는곳에서 디비에서 새로이 읽어서 데이타를 전송해준다.

'laravel' 카테고리의 다른 글

laravel http response 코드  (0) 2017.05.05
cache 활용하기  (0) 2015.07.15
sublime 에서 laravel phpfmt 사용하기  (0) 2015.07.07
laravel custom id  (0) 2014.12.29