Loren adlı üyeden alıntı: mesajı görüntüle
Merhabalar ;

bilmediğimden sizlere bir soru sormak istiyorum.Redis redis diye çok duydum nosql veritabanı ve laravel ile hazır entegrasyonu var fakat bu redis nasıl kullanılıyor ? redis kullanırsak mysqli kullanmyacakmıyız ? redis zaten ilişkisel veritabanı değil eğer mysql kullanmıyorsak join işlemlerini nasıl yapacağız yada ilişkisel olmayan yerlede mi redis kullanacağız ? benim sitemin 20 kolonlu bir veritabanı 600 satır veri aldıktan sonra kasmaya başlayınca başka bir çözüme odaklanmak istedim o yüzden sizlere soruyorum
Hocam selamlar,
20 kolonlu 600 satır veriyi tek seferde mi datatable a gönderiyorsunuz. Yani tek seferde tüm datayı çekip view e gönderiyorsunuz,
sonra view'de datayı foreach ile döngüye sokup her <tr> ye bir row gelecek şekilde yazdırıyorsunuz, datatable paginate yapıyor veriyi sandığım kadarıyla.
Çünkü bahsettiğiniz veri büyük bir veri değil, laravel ile de bu sorgu 5-6 saniye sürmez.
Uzun süren olay bu datayı datatable'ın render edip sayfalamasıdır.

Datatable serverside kullanarak her pagination sayfa geçişinde gerekli datayı çekmek doğru çözümdür. Burada redis in size pek faydası olmaz.. Yani tüm datayı değil de o an görüntülenen datayı çekmelisiniz her seferinde. Fakat bu çektiğiniz datayı datatable'ın kendi sınıfının verdiği formatta dönmelisiniz.

Biraz karışık gelebilir ama size daha önce göndermiş olduğum bir sınıf vardı. Orda datatable metodu var.
O metod ile Laravelde datatable için sayfalanmış veri gönderme şansınız var. Postgresql e göre yapmıştım ama mysql e de çevirip göndermeyi deneyeceğim vaktim olursa. Siz de deneyebilirsiniz
pl/sql e göre birkaç fonksiyon var sadece.
Siz çevirebilirseniz şöyle yapacaksınız.

Gönderdiğim sınıfı AppLibraries diye bir dizine atın.
Daha sonra bir controller olsun örneğin DataController;
Göndermiş olduğum sınıfı aşağıdaki şekilde controller'a dahil edin,
use App/Libraries/SinifAdi;
bu controllerda da users diye bir metod olsun. Bu metod veritabanındaki user tablosundan userları çekiyor olsun.
public function users(Request $request){
   // data isteği eğer datatable'dan geliyorsa request'in içinde draw diye bir anahtar olur.
  // bu yüzden bu değer varsa eğer istek datatable'dan geliyor demektir.
  //O zaman cevabı datatable a göre dönmek için
  // aşağıdaki işlemi yapabilirsin.
 if ($request->has('draw'))
      {
                $result = SinifAdi::datatable($request, User::class);
                return $result;
      }

    // Burdan sonra ise eğer datatable ile işi yoksa ne yapması
   // gerekiyorsa onu yapabilirsin örneğin userları view e göndermek için
   $users = User::all();
   return view('users',['users'=>$users]);
}
Şimdi bir tane de rota olsun.
Route::get('users','DataController@users');
Bu rotaya gelen istek tarayıcıdan geliyorsa yani adamın biri http://domain.com/users adresine giderse datatable ile işi yok demektir.
O kişiye user view'i döner.

Ama datatable dan geliyorsa ona istediği sayfanın datasını döner.
Datatable da bu rotayı da şöyle verebilirsin.

 $(document).ready(function() {
     $('#example').DataTable( {
        "processing": true,
        "serverSide": true,
        "ajax": "{{url('users')}}"
     } );
} );
Artık datatable her sayfayı otomatik olarak veritabanından lazım olduğu zaman çekecektir.



Redis'e gelince, redis bir veritabanı değildir aslına bakılırsa.
Veri tutar ama bildiğimiz mantıkta veri arayıp bulmak için değil de zaten sonucunu bildiğimiz verileri tutup hızlı bir şekilde ulaşmak içindir.
Cache yani arkadaşların da dediği gibi. Tabi çok güzel özellikleri var pub/sub gibi. Benim hayatımı kurtarıyor bazı işlerde mesela. http request atmadan
iki farklı uygulamanın haberleşmesini sağlayabiliyorsunuz bir nodeJs uygulaması ile bir php uygulamasını birbirinden haberdar çalıştırabilirsiniz mesela
redis ile. Ama mysql kafasında değildir bu mantık. O yüzden eğer sizin projenizdeki 600 satırlık veri hiç değişmiyorsa redis te tutup hızlı bir şekilde de ulaşabilirsiniz
ama değişiyorsa bir anlamı yok.

Kolay gelsin.