[DOCS][Dev] Add Cache

This commit is contained in:
Diogo Peralta Cordeiro 2021-08-01 12:09:07 +01:00 committed by Hugo Sales
parent b60a07f270
commit 0c6088225f
No known key found for this signature in database
GPG Key ID: 7D0C7EAFC9D835A0

View File

@ -0,0 +1,57 @@
Cache
=====
In the Database chapter you've learned how
GNU social allows you to store data in the
database. Depending on your server's
specification, the database can be a bottleneck.
To mitigate that, you can make use of an in-memory
data structure storage to [cache](https://en.wikipedia.org/wiki/Cache_(computing))
previous database requests. Using it is a great way of
making GNU social run quicker. GNU social supports many
adapters to different storages.
Although different cache adapters provide
different functionalities that could be nice
to take advantage of, we had to limit our cache
interface to the basic avaiable in all of them.
I.e., _store_ and _delete_ operations.
Store
-----
```php
/**
* Get the cached avatar file info associated with the given GSActor id
*
* Returns the avatar file's hash, mimetype, title and path.
* Ensures exactly one cached value exists
*/
public static function getAvatarFileInfo(int $gsactor_id): array
{
try {
$res = GSFile::error(NoAvatarException::class,
$gsactor_id,
Cache::get("avatar-file-info-{$gsactor_id}",
function () use ($gsactor_id) {
return DB::dql('select f.file_hash, f.mimetype, f.title ' .
'from App\Entity\Attachment f ' .
'join App\Entity\Avatar a with f.id = a.attachment_id ' .
'where a.gsactor_id = :gsactor_id',
['gsactor_id' => $gsactor_id]);
}));
$res['file_path'] = \App\Entity\Avatar::getFilePathStatic($res['file_hash']);
return $res;
} catch (Exception $e) {
$filepath = INSTALLDIR . '/public/assets/default-avatar.svg';
return ['file_path' => $filepath, 'mimetype' => 'image/svg+xml', 'title' => null];
}
}
```
Delete
------
```php
Cache::delete('avatar-file-info-' . $gsactor_id);
```