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ľúč:
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ľúč:
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ť.
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 kryptomienOdoslaním daru súhlasíte s našimi podmienkami prijímania darov.
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.