Extra Form
PHP PHP 7.4
CMS Rhymix 2.1

안녕하세요.

 

외부 페이지 캐시를 이용하려고하고 있습니다.

 

<?php

function getMyDataFromAPI()
{
    $cache_key = 'aaaaaaaa';
    $data = Rhymix\Framework\Cache::get($cache_key);

    if ($data)

   {
           return $data;

    }

    // 실제 API를 불러오는 내용
    $data = json_decode($response, true);
        
    $ttl = 3600;
    Rhymix\Framework\Cache::set($cache_key, $data, $ttl);

    return $data;
}

 

echo $data

 

?>

 

 

이런식으로 api를 통해서 data 값을 캐시에 저장 시켰습니다.

 

echo $data 를 해봐도 공백이나오네요

 

이캐시된 데이터를 불러오는 코드는 어떻게 될까요?

 

캐시에 데이터를 저장 했으면 불러와야할것 같은데

 

제가 원리를 잘못이해하고있는것일까요?

 

도움 부탁드립니다.

  • Lv9
    코드만 보면 정상적으로 데이터가 나오는게 맞습니다만, 캐시는 말 그대로 데이터를 저장하는 임시 장소입니다.

    캐시에 내가 지정한 시간까지 무조건 데이터가 저장되어있을것이다! 라는 가정은 절대 하시면 안됩니다.

    캐시에 데이터가 저장되자마자 삭제되어도 본 동작에는 무리가 없게 설계하셔야 합니다.



    그리고 문제에 대해 추정을 해보자면 Cache 클래스는 라이믹스의 캐시 수단을 활용하고 있습니다.

    혹시 라이믹스 설정에서 라이믹스 캐시 방식을 apc 혹은 그 외의 수단으로 설정했는지 확인해보시겠어요?

    캐시 사용안함으로 설정되어있으면 캐시에 데이터가 저장되지 않는게 정상입니다.
    => 저장되지 않았으니 get을 해도 아무런 값이 안나오는게 정상이죠 ㅎㅎ
  • Lv9 Lv12

    답변 감사합니다.

    특별히 외부 캐시를 쓰는곳은 없습니다.

     

    페이지에서 캐시를 60분 주니깐
    echo date('Y-m-d H:i:s');를 해보니 마지막에 실행한 시간에 멈춰 있는것 같네요.
    일반 html 캐시로 작동하는 것같아요.

  • Lv9 Lv12
    말씀 주신것처럼 캐시 사용안함으로 되어있었네요
  • Lv37

    getMyDataFromAPI() 함수를 정의하기만 하고, 실행(호출)하는 부분이 안 보이는데요.

    내가 그의 이름을 부르기 전에는 그는... 아무튼 뭐 아무 일도 일어나지 않죠.

     

    만약 호출한다 해도, 함수 안에서 사용한 $data라는 변수는 함수 바깥의 세상에는 존재하지 않습니다.

    함수는 입력값(input)과 리턴값(output)을 통해서만 바깥 세상과 데이터를 주고받을 수 있지요.
     

    $data = getMyDataFromAPI();

     

    이렇게 함수를 실행한 결과를 받아와서 $data에 담아야

    함수 바깥에도 $data가 존재하게 되겠지요.

  • Lv37 Lv12

    혹시
    rxe와 연결 되어있는 아무 외부 문서에서
    $data = getMyDataFromAPI();
    를 호출하면 아까 저장해놓았던 저 data의 캐시값을 가져올 수 있게 되는건가요?

    사실 방금 getMyDataFromAPI() 함수를 정의한 문서는 여전히 로딩이 느리더라구요. (아마 계속 캐시키 aaaaaaaa에 새값을 저장하는 듯한 느낌)

    그게 맞다면 getMyDataFromAPI() 함수를 정의한 문서를 클론탭에 넣고 사용자에게는

    rxe와 연결 되어있는 아무 외부 문서에서

     

    <?php
    $data = getMyDataFromAPI();
    echo ($data);
    ?>

    {@ $data = getMyDataFromAPI()}
    {@ echo ($data);}

     

    $data = getMyDataFromAPI(); 를 호출하고
    데이터를 출력해주면 된다 로 이해한게 맞을까요?

     

    로 해보니 정의된 것이 없다보니 500에러가 나오네요

  • Lv12
    그리고 추가 적으로 데이터를
    data 하나만말고
    data,data2,data3,data4,data5,data6,data7,data8,data9,data10
    이 정도는 캐시 시켜야하는데

    이것다 나열을 해야할까요?

    if ($data)

    {
    return $data;

    }

    이렇게 하나만 하기엔 정보를 담는게 부족하네요


    지금 처럼 통 html을 다 넣기엔 또 뭔가 아쉽고 ㅎㅎ
  • Lv12 Lv9
    캐시 키를 여러개 사용하세요

    Rhymix\Framework\Cache::set('key1', $data1, $ttl);
    ...
    Rhymix\Framework\Cache::set('key2', $data2, $ttl);
    ...