The UserFrosting cache service instantiates the Laravel Cache component for global caching. The Laravel documentation provides excellent examples on how to use the caching API. The only difference is that UserFrosting provides the required setup for you. Plus, instead of using a Cache
facade, you simply inject the cache service using the The DI Container:
use Illuminate\Cache\Repository as Cache;
class MyClass
{
public function __construct(
protected Cache $cache
) {
}
public function users(): UserInterface
{
return $this->cache->get('users', function () {
return Users::get();
});
}
}
Every method documented for the Laravel Cache is accessible inside the cache service: get
, has
, increment
, decrement
, remember
, pull
, put
, forever
, rememberForever
, tags
, etc.
While the cache service provides caching for the entire website, that is, when the data is shared across all users, UserFrosting also provides a handy way to cache data specifically to each user. Simply use the getCache()
method of the user object to get a cache instance tied to that user :
$userCache = User::find(1)->getCache();
$userCache->forever('key', 'Foo');
$userCache->get('key'); // Return 'Foo'
$userCache = User::find(2)->getCache();
$userCache->forever('key', 'Bar');
$userCache->get('key'); // Return 'Bar'
While the forget
and flush
methods will work to flush the entire application cache, you can also use the clear-cache
command from the Bakery CLI:
$ php bakery clear-cache
UserFrosting provide access and configuration out of the box for 3 cache drivers: File
, Memcached
and Redis
.
The driver used by UserFrosting can be defined in the configuration files under the cache.driver
key. To change drivers, simply overwrite this key in your sprinkle for one of the drivers below.
The file driver is the one enabled by default. Cached data is stored in text files located in app/cache/
. While slower and less efficient than memory based drivers, the file driver is ideal for a development environment.
tags
. UserFrosting uses a custom version of this driver that enabled tagging. Still, Memcached and Redis are more optimized for this and should be used in a production environment for better performance.In contrast with the file driver, the Memcached driver stores the cached data in memory, allowing for better performance. Using the Memcached driver requires the Memcached PECL package to be installed. Configuration for this driver can be found in the configuration files, under the cache.memcached
key:
'cache' => [
'memcached' => [
'host' => '127.0.0.1',
'port' => 11211,
'weight' => 100
]
]
Similar to Memcached, Redis uses in-memory data structure to store the cache data. This, of course, requires you to have Redis already installed on the server. Configuration for this driver can be found in the configuration files, under the cache.redis
key:
'cache' => [
'redis' => [
'host' => '127.0.0.1',
'password' => null,
'port' => 6379,
'database' => 0
]
]
database
option to assign one of 16 default Redis databases (identified by a number form 0 to 15) to your UserFrosting instance and avoid sharing the same database with multiple apps.When using multiple instances of UserFrosting with the Memcached or Redis driver on the same server, or any other app using Redis/Memcached, you should edit the config.prefix
configuration value so each installation uses a unique prefix. Otherwise, both installations of UserFrosting might end up sharing the same cached data. Note that this does not affect the file driver.