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);

Odpowiedz

Ostatnio komentowane

  1. Mysql - FAQ Paweł
  2. Pager 2.5.1 oraz EPa... Na szybko2
  3. Pager 2.5.1 oraz EPa... Sławek
  4. Mysql - FAQ Piotr
  5. Liczba dni roboczych Na szybko2
  6. Liczba dni roboczych Naszybko
  7. Klasa widoku nospor

Skrypty użytkowników

  1. Klasa obsługi szablo... Lirdoner
  2. Sekcje user76
  3. Klasa walidująca for... user76
  4. Licznik Gości online korey
  5. Form Builder Comandeer
  6. Dynamiczny licznik z... korey
  7. Captcha Comandeer