NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky

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é volaniePrí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 kryptomien

Odoslaní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.