[DOCS][Dev] Add Cache
This commit is contained in:
parent
b60a07f270
commit
0c6088225f
|
@ -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);
|
||||||
|
```
|
Loading…
Reference in New Issue
Block a user