---
title: "Cache odpovedí — Google Places for Laravel | Roundly"
description: "Voliteľná cache idempotentných dopytov šetrí latenciu aj náklady na Google — bezpečné kľúče, zapamätané neexistujúce miesta a obnovenie cez fresh."
url: https://roundly-consulting.com/sk/open-source/navody/google-places-for-laravel/cache-odpovedi
language: sk
---

[Všetky balíky](https://roundly-consulting.com/sk/open-source.md)

[Google Places for Laravel](https://roundly-consulting.com/sk/open-source/navody/google-places-for-laravel.md)

# Cache odpovedí

Nastavením GOOGLE\_PLACES\_CACHE=true zapnete cache idempotentných dopytov (detail, spätné a priame geokódovanie, vzdialenosť, matica vzdialeností, textové a okolité vyhľadávanie). Našepkávanie sa nikdy necachuje. Kľúče cache nikdy neobsahujú API kľúč:

```bash
GOOGLE_PLACES_CACHE=true
GOOGLE_PLACES_CACHE_STORE=redis   # optional; null = the default store
GOOGLE_PLACES_CACHE_TTL=86400     # seconds
```

- Cachuje sa: details(), geocode(), geocodeAddress(), textSearch(), nearbySearch(), findPlace() (spúšťa textové vyhľadávanie), distance(), computeMatrix() a matrix().
- Necachuje sa: autocomplete(), stránkované metódy textSearchPaginated() / nearbySearchPaginated(), požiadavky na fotografie (photo(), photoUri(), photoContents()) a check().
- Odpoveď 404 pri detaile je tiež odpoveď — „také miesto neexistuje“ — a cachuje sa ako každý iný výsledok, takže opakovanie sa znova nefakturuje.
- Prechodné zlyhania vždy vyhodia výnimku a nikdy sa necachujú.
- Balík cachuje surovú odpoveď Google a DTO skladá pri čítaní, takže záznamy fungujú aj s obmedzením cache.serializable\_classes v Laraveli.
- Výsledok z cache neposiela požiadavku, a preto nespúšťa žiadnu udalosť životného cyklu.

## Obídenie cache

Každý cachovaný dopyt prijíma príznak fresh — ako posledný argument konštruktora (fresh: true) alebo cez metódu fresh(), pričom každá fluentná metóda ho zachová; handle matrix() má vlastné fresh(). Dopyt s fresh preskočí čítanie z cache, opýta sa Google a odpoveď zapíše späť pod ten istý kľúč:

```php
use RoundlyConsulting\GooglePlaces\DataTransferObjects\DetailsQuery;
use RoundlyConsulting\GooglePlaces\Facades\GooglePlaces;

$place = GooglePlaces::details(new DetailsQuery($placeId, fresh: true));
$place = GooglePlaces::details((new DetailsQuery($placeId))->fresh());   // the same

GooglePlaces::matrix($origins, $destinations)->fresh()->driving();
```

- Zápis späť — ďalšie bežné čítanie dostane obnovenú odpoveď a platnosť záznamu začne plynúť odznova.
- 404 pri detaile — dopyt s fresh uloží null rovnako ako bežný, takže ďalšie bežné čítania vrátia null.
- Zlyhanie — dopyt s fresh, ktorý zlyhá, vyhodí PlacesException. Zlyhania sa nikdy necachujú, takže starý záznam ostane na mieste a bežné čítania ho dostávajú ďalej.
- Skutočná požiadavka — dopyt s fresh zaberie miesto v rate limite, spustí PlacesResponseReceived alebo PlacesRequestFailed a zaloguje sa rovnako ako volanie, ktoré v cache nič nenašlo.
- Vypnutá cache — pri cache.enabled false ide každé volanie do Google tak či tak, takže príznak nič nemení.
- Len lokálne — príznak sa do Google nikdy neposiela a nie je súčasťou kľúča cache, takže dopyt s fresh aj bežný dopyt zdieľajú jeden záznam.

| Cachované volanie | Príznak nesie |
| --- | --- |
| `details()` | `DetailsQuery` |
| `geocode()` | `ReverseGeocodingQuery` |
| `geocodeAddress()` | `GeocodingQuery` |
| `textSearch()` | `TextSearchQuery` |
| `nearbySearch()` | `NearbySearchQuery` |
| `distance()` | `DistanceQuery` |
| `computeMatrix() / matrix()` | `MatrixQuery / PendingMatrix::fresh()` |

Príznak zachová aj volanie details() v rámci billing session. Skratky s reťazcom a Location (details('ChIJ…'), geocode($lat, $lng)) a findPlace() príznak neprijímajú — odovzdajte namiesto nich query objekt. Endpointy, ktoré sa nikdy necachujú, príznak nemajú: nie je čo obchádzať.

```php
use RoundlyConsulting\GooglePlaces\DataTransferObjects\TextSearchQuery;

// findPlace() takes no flag — run its one-result text search fresh instead:
$place = GooglePlaces::textSearch((new TextSearchQuery('Googleplex'))->take(1)->fresh())->first();
```

## 30-dňový limit Google na uložený obsah

Podmienky Google Maps Platform obmedzujú, ako dlho smiete obsah z Places uchovávať: to, čo sa uložiť smie, najviac 30 po sebe idúcich dní (place ID sú výnimkou). Podmienky sa menia, preto si pre svoje použitie overte aktuálne Maps Service Specific Terms. Z toho vyplývajú dve veci:

- Držte cache.ttl výrazne pod 30 dňami. Balík ju neobmedzuje.
- Ak si snímky ukladáte sami (napríklad v tabuľke places), obnovujte ich dopytom s fresh. Bežný dopyt môže vrátiť odpoveď z cache, ktorá je stará až cache.ttl, takže snímka označená ako „práve obnovená“ by bola v skutočnosti staršia.

## Vymazanie

Záznamy vypršia po cache.ttl. Jeden záznam obnovíte zopakovaním jeho dopytu s fresh. Príkaz na vymazanie všetkých záznamov balík nemá — keď potrebujete začať načisto, vyprázdnite store alebo použite samostatný cez GOOGLE\_PLACES\_CACHE\_STORE.

## Prejavte lásku k open source

Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.

[Ďalšie spôsoby podpory vrátane kryptomien](https://roundly-consulting.com/sk/podporte-nas.md)

Odoslaním daru súhlasíte s našimi [podmienkami prijímania darov](https://roundly-consulting.com/sk/podmienky-darov.md).

[Podporte našu open-source prácu (otvorí sa v novej karte)](https://donate.stripe.com/dRmeVe8FX5PF1Qd9pXcEw00) [Pridajte sa k nám na Patreone (otvorí sa v novej karte)](https://www.patreon.com/cw/roundly)

## Chcete to zabudovať do svojho produktu?

Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.

[Ponuka do 48 hodín](https://roundly-consulting.com/sk/kontakt.md) [Prezrieť všetky balíky](https://roundly-consulting.com/sk/open-source/navody/google-places-for-laravel.md)
