1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
|
<?php
namespace MediaWiki\Settings\Cache;
use MediaWiki\Settings\Source\SettingsSource;
/**
* A {@link SettingsSource} that can be cached. It must return a unique
* (enough) and deterministic hash key for cache indexing.
*
* @since 1.38
* @stable to implement
*/
interface CacheableSource extends SettingsSource {
/**
* Allow the caching layer to attempt to return stale results in the event
* that loading from the original source fails.
*
* Note that allowing stale results will result in cache items being
* stored indefinitely regardless of the {@link getExpiryTtl()} value, and
* since there is currently no pruning of cache items, it is advised that
* sources allowing stale results also implement an immutable
* `getHashKey()` based only on constructor arguments.
*
* @return bool
*/
public function allowsStaleLoad(): bool;
/**
* Returns the cache TTL (in seconds) for this source.
*
* @return int
*/
public function getExpiryTtl(): int;
/**
* Coefficient used in determining early expiration of cached settings to
* avoid stampedes.
*
* Increasing this value will cause the random early election to happen by
* a larger margin of lead time before normal expiry, relative to the
* cache value's generation duration. Conversely, returning a lesser value
* will narrow the margin of lead time, making the cache hold items for
* slightly longer but with more likelihood that concurrent regenerations
* and set overwrites will occur. Returning <code>0</code> will
* effectively disable early expiration, and by extension disable stampede
* mitigation altogether.
*
* A greater value may be suitable if a source has a highly variable
* generation duration, but most implementations should simply return
* <code>1.0</code>.
*
* @link https://en.wikipedia.org/wiki/Cache_stampede#Probabilistic_early_expiration
* @link https://cseweb.ucsd.edu/~avattani/papers/cache_stampede.pdf
*
* Optimal Probabilistic Cache Stampede Prevention
* Vattani, A.; Chierichetti, F.; Lowenstein, K. (2015), "Optimal
* Probabilistic Cache Stampede Prevention" (PDF), Proceedings of the VLDB
* Endowment, VLDB, 8 (8): 886–897, doi:10.14778/2757807.2757813, ISSN
* 2150-8097 https://cseweb.ucsd.edu/~avattani/papers/cache_stampede.pdf
*
* @return float
*/
public function getExpiryWeight(): float;
/**
* Returns a deterministically computed key for use in caching settings
* from this source.
*
* @return string
*/
public function getHashKey(): string;
}
|