Laravel Caching
Tags: php, laravel, cache, beginners
Published: 2020-02-23 06:11:46

In basic understanding, Caching makes things faster. If I ask you the computation of 4x5 then your immediate answer would be 20. Your brain has done this computation several times that it doesn’t even need to be done again. Imagine if you had to do it by drawing four lines repeating five times and count it like you did it for the first time in our childhood. Then it would be a very expensive process(in terms of processing and time). Exactly the same case.

Laravel provides API for various caching mechanisms. Cache configuration is located at config/cache.php in your laravel project. Laravel supports famous caching backends like Memcached, Redis. It looks something like:

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/ks4ff0150g9khaszl33s.png)

##Cache Usage

We can access Laravel cache in two ways i.e Factory and Repository. The factory provides access to all cache drivers defined. The repository is an implementation of the default cache driver for your application as specified by a cache configuration file. But on top of that, we use cache by cache facade as the best implementation of Factory and Repository as

```php
Illuminate\Support\Facades\Cache
```

##Cache methods

####put():
This method takes three parameters i.e key, value and time in minutes.

```php
Cache::put('cachekey', 'I am the cache',10);
```

####get():
This method either takes one or two parameters i.e key and value after the cache is expired.

```php
Cache::get('cachekey); 
Cache::get('cachekey', 'Cache died, so heres aftercache data');
```

####has():
It returns a boolean value and takes a key as a parameter.

```php
if(Cache::has('cachekey')){
     return true;
}
```

####forever():
This method is useful when you want data to be available for user irrelevant of time. And it takes key and value as a parameter.

```php
Cache::forever( 'cachekey', 'I am in the forever cache data!' );
```

####forget():
This method is useful if you have used forever() method previously or you need to expire cache before the allocated time.

```php
Cache::forget('cachekey');
```

Also, database caching and route caching can come into great handy.

##Response time with and without cache

Let us take a simple example of accessing the Students model which stores the information of 40 students of a classroom.

Without any caching mechanism, simple PHP code to access it would be:

```php
public function index() {
    $students = Students::all();
    return response()->json($students);
}
```

With the caching mechanism, it would be something like:

```php
public function index() {
    $students = Cache::remember('students', 24*60, function() {
        return Students::all();
    });
    return response()->json($students);
}
```

Now, let’s take a look at response time in its 1st, 2nd, 3rd and 4th hit respectively.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/nlmh8f4z2noa1fkjrsbt.png)

The first hit takes a longer time because computationally, it is storing data in cache + retrieving data for end-user. But after the first hit, response time is much less. So, for the larger application Memcached, Redis driver is much recommended.

##Atomic Lock 

Atomic Lock means one server being used by one process at one time to avoid a race condition. The race condition is an undesirable condition which occurs when two task/process tries to access the same resource but due to the system’s nature needs to be done sequentially.

```php
Cache::lock('key',10);
```

##Cache Helper

If you reflect back from the start of this article to till now then you know one thing for sure i.e cache can be accessed from cache facade. In addition to that, the cache can also be accessed from cache global function.

```php
cache(['key' => 'value'], $seconds);
```

Happy reading!

This article was originally published on https://www.techradiant.com/2020/02/20/laravel-caching/