Redis ile veri cachelenmesi    | Symfony 
Published: 2022-02-13 13:42:50

Selamlar ben Alperen,
Bu yazıda sizlere Redis'in ne işe yaradığını  ve nasıl kullanıldığını bahsedeceğim.

Bunu yaparken sırası ile Redis nedir ? , nasıl kurulur , Symfony redis config ve son olarak  Redis ile veri cachelenmesini anlatarak sunumu tamamlayacağım . 


## Redis nedir ? 
  **REmote DIctionary Server**
Redis bir veri yapısı sunucusudur. Açık kaynak, bellek kullanımlı, anahtar-değer deposudur. Redis "Uzak Sözlük Sunucusu" anlamına gelmektedir. Çeşitli kaynaklara göre en çok kullanılan anahtar-değer veritabanıdır.
 Daha fazla bilgi için [bu kaynaktan yararlanabilirsiniz .](https://devnot.com/2020/redis-nedir-temel-kullanim-alanlari-nelerdir/) 

## Redis nasıl kurulur ? (Ubuntu)

`sudo apt install redis-server`
Terminalde bu komutu çalıştırdıktan sonra localimizde redis-server'i kurmuş olacağız. Redis'in çalışması için config ayarlarımızı tamamlamamız gerekiyor . 
`sudo nano /etc/redis/redis.conf`
`supervised` kısmı default olarak `no` geliyor görseldeki gibi değiştirelim .
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yf9gy2efszmzsf8ill5i.png)
bu düzenlemeden sonra redis server'ımızı tekrar başlatalım.

`sudo systemctl restart redis.service`

`sudo systemctl status redis` 


![](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w4ijuki2owfngprusqej.png)

Sizde de görseldeki bir görüntü varsa kurulum başarılı demektir.

## Symfony Redis Config

Symfony'nin işimizi kolaylaştırmak için bir paketi bulunmakta  , onu kurarak başlayalım .
` composer req symfony-bundles/redis-bundle`

cache.yaml dosyamıza girelim.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dw6ijh0ou31vfowtflmc.png)

Görselde gördüğümüz `pools` verilerimizin tutulacağı kısım `cache.my_redis` ise poolumuzun adı oluyor . 
Biraz önce kurmuş olduğumuz redis-bundle'ın bize sağlamış olduğu `cache.adapter.redis` 'i adapter kısmına yazalım redis ile verilerimiz arasında köprü görevi görüyor. 

 
`Provider` redis ile bağlantımızı sağlıyor . Peki  `app.my_custom_redis_provider` ne anlama geliyor ? 
aslında orada bir servis adı belirtiyoruz.

cache.yaml dosyamızın alt kısmına 

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lg06pts6br4hwj5jgh9y.png)
Görseldeki gibi bir servis oluşturuyoruz. Bu servis 
poolumuzun hangi portta olduğunu ve `createConnection` ile  yanındaki `Redis adapter componenti `çağrıldığında çalışacağını belirtiyoruz.

## Verilerimizi Cacheleyelim 

Verilerimizi cachelemek için Controllerımıza poolumuzu dahil edelim ama önce hangi pool nasıl çağırılır bunu öğrenelim. 

 `php bin/console debug:autowiring cache`
 komutunu terminale yazalım. 


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pyp7sonxzh3r6gad4vwf.png)

Görselde gördündüğü gibi parantez içinde olanlar pool adları yanlarındaki ise nasıl kullanacağımızı belirten parametreler
Biz burda `cache.my_redis `poolunu kullanacağız. 


Veritabanında post tablomuz olduğunu ve içindeki veriler cacheleyeceğimizi varsayalaım. 



![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ror8s8hnp1jovugeotbs.png)


Görsel'i açıklamak gerekirse ;

Poolumuza 'key' adlı bir `key` oluştur ve bu keyin value'si yani değerini `$postRepository` de findby  koşullarını sağlayan verileri `$post` yap ve return et . Son olarak `dd` ile `$cacheItem`'ı bastır. Çıktı şu şekilde olacaktır.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/23dm49dxul6clu33lqoh.png)

Sitemizin ön tarafında cache işlemi gerçekleşti . Peki bunu arka tarafta nasıl kontrol edebiliriz ? 

Symfony bizim için bunları `localhost:8000/_profiler`de tutuyor . öncelikle bastırdığımız `dd`'yi kaldıralım ve sayfayı yenileyelim . 



![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hmtalvbzknje0mv58y8u.png)

Görseldeki gibi sizde de olan menüden cache ile ilgili olana tıklayalım. 

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fauri6vczt6j4zgefw4x.png)

 Bütün pool'lar burda ve bizim verilerimiz `cache.my_redis  `pool' unda tutuluyor. Arka taraftada bu işlemi doğruladık.   

Teşekkürler  -_-