1. Go to this page and download the library: Download aol/offload library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
aol / offload example snippets
$offload = new OffloadManager(/* ... */);
// Fetch a result and repopulate it if necessary.
$data = $offload->fetch('task-key', function () {
// Perform a time consuming task...
return $data;
})->getData();
// Setup a cache.
$cache = new OffloadCacheMemcached($memcached_instance);
// Setup a lock.
$lock = new OffloadLockRedis($predis_instance);
// Default options for offload manager:
$default_options = [
'ttl_fresh' => 5, // Cache time in seconds
'ttl_stale' => 5, // Stale cache time in seconds
'exclusive' => true, // Whether to run tasks exclusively by key (no concurrent repopulates for the same key)
'background' => true, // Whether to run tasks in the background
'background_timeout' => 5, // Timeout for exclusive background repopulates in seconds
];
// Create the offload manager.
$offload = new OffloadManager($cache, $lock, $default_options);
// ...
register_shutdown_function(function () use ($offload) {
if ($offload->hasWork()) {
// Flush all buffers.
while (ob_get_level()) {
ob_end_flush();
}
flush();
// End the request if possible (under PHP FPM).
if (function_exists('fastcgi_finish_request')) {
fastcgi_finish_request();
}
// Run all tasks in the queue.
$offload->drain();
}
});
$data = $offload->fetch('task-key', function () {
// ...
$promise = $guzzle_client->getAsync('http://www.example.com');
return new OffloadDeferred([$promise, 'wait']);
})->getData();
$result = $offload->fetch($key, function () {
// Perform long running task...
return $data;
});
$result = $offload->fetch($key, $repopulate, ['ttl_fresh' => 5]);
// is the same as:
$result = $offload->fetchCached($key, 5, $repopulate);
$result = $offload->queue($key, $repopulate, ['ttl_fresh' => 5]);
// is the same as:
$result = $offload->queueCached($key, 5, $repopulate);
$offload->fetch($key, function (OffloadRun $run) {
// Get some data from a service...
$object = $this->service->get($arguments);
if (!$object->isValid()) {
// If the data returned is not valid, mark the result as bad.
// This will tell the offload manager *not to cache* the data.
$run->setBad();
}
});
class CustomEncoder implements OffloadEncoderInterface
{
// ...
public function encode($object)
{
// ... Encode the value ...
return $string_value;
}
public function decode($string)
{
// ... Decode the value ...
return $object_value;
}
}
// ...
$offload = new OffloadManager(/* ... */);
// Change the encoder.
$offload->getCache()->setEncoder(new CustomEncoder(/* ... */));
// Get the base encoder.
$base_encoder = $offload->getCache()->getEncoder();
// Wrap it with an encrypting encoder.
$encrypting_encoder = new OffloadEncoderEncryptedAes256(
$base_encoder,
// The key ID for the encryption.
'foo',
// Secret keys by ID. This enables key cycling.
[
'foo' => 'my_secret_key'
]
)
$offload->getCache()->setEncoder($encrypting_encoder);