Pobieranie danych z zewnątrz i wrzucanie wyniku do cache

2013-11-04 20:12:20 Post #1 artur

 
Pobieram sobie co jakiś czas plik z zewnętrznego serwera obrabiam go w php, wynik obróbki wrzucam do cache na 15 minut i wyświetlam dane na stronie, czasami serwer zewnętrzny ma jednak zadyszkę i nie da rady się z nim połączyć wtedy chciałbym wyświetlać dane z cache, czy muszę tworzyć 2 cache i zapisywać do nich dane z obróbki pliku z zewnętrznego serwera? Pierwszy cache byłby 5 minutowy powiedzmy a drugi ten z którego pobierało by dane awaryjnie... jak by serwer zewnętrzny "zdechł" na chwile i on by się czyścił i zapełniał świeżymi danymi w momencie połączenia z zewnętrznym serwerem.

2013-11-05 08:27:29 Post #2 nospor

 
Hmmm.... faktycznie, gdy cache straci waznosc to jest czyszczony i problem sie pojawia, gdy nie jestes w stanie wygenerować świeżych danych. Rozwiązanie na szybko jakie mi przychodzi to nie dwa cache jak sugerowales, ale wpierw pobranie zawartosci cache z lifetime ustawionym na 1000000 - na pewno sie nie przedawni , a dopiero potem normalnie pobranie cache jak to robiles do tej pory. Jesli nie bedziesz wstanie wygenerowac nowych danych to pobierzesz dane z pierwszego pobrania cache

2013-11-05 17:35:08 Post #3 artur

 
Jak rozumiem, Twój post to myślisz o wykorzystaniu tylko jednego cache, ale skąd skrypt będzie wiedział ze ma pobrać nowe dane z serwera zewnętrznego jak cache tak długo nie straci ważności?

W mojej wersji to miało wyglądać tak:

$dane - lifetime: 300
$dane_backup - lifetime: 1000000;

Jeżeli jest cache o nazwie $dane (nie straciło ważności) to wyświetl dane z cache, a jeżeli cache $dane nie ma to się połącz się i pobierz dane ze strony i wrzuć w cache $dane, usuń $dane_backup i utwórz świeże $dane_backup następnie wyświetl wynik na stronie. Jeśli funkcja połącz() nie uzyska połączenia z serwerem wyświetl zawartość cache $dane_backup

Czyli cache $dane_backup kasuje się i tworzy/aktualizuje dopiero jak połączę się serwerem i otrzymam dane, a cache $dane kasuje/aktualizuje się co 300 sekund, dane pobierane są w zależności od stanu połączenia, z cache $dane_backup jak jest problem z pobraniem danych z zewnątrz, a z $dane zawsze kiedy jest, albo nie ma i jest możliwość aktualizacji danych. Mam nadzieje że jasno w miarę opisałem.

PS. przydałby się w pisaniu odpowiedzi podgląd postu na który odpowiadam.

2013-11-06 07:55:21 Post #4 nospor

 
$dane_backup pobiera dane z dokladnie tego samego cache co $dane. Tylko ze $danebackup pobiera z lifetime 1000000 i on zawsze pobiersze dane jak są, dzieki czemu gdy $dane bedzie przedawnione i puste i nie bedziesz mogl wygenerowac nowych danych, to bez problemu pobierzesz stare z $dane_backup, ktore pobrales przed wywolaniem normalnego get dla $dane

2013-11-06 15:06:17 Post #5 artur

 
Przepraszam może za głupie pytanie ale jak pobrać jedno cache z lifetime = 10000000000 a za chwile to samo cache z lifetime = 300 ? Chyba że się nie rozumiemy, tzn ja nie rozumiem )

//edit

sorry już mam )
//Obiekt nalezy do grupy config. Nadpiszemy jednak waznosc. NIech bedzie wazny przez 5 sekund.
$val = $cache->Get('testFiles2', '@config', 5);

Answer

Categories

  1. wszystkie wszystkie komentarze all (1)