Now Reading: Laravel Blog Görüntülenme Sayacı: IP ve Redis Cache ile Kontrol

Loading

L

15/05/2025 / gadasi

Laravel Blog Görüntülenme Sayacı: IP ve Redis Cache ile Kontrol

svg52

Laravel ile blog yazılarınızın kaç kez görüntülendiğini saymak istiyorsanız ama her sayfa yenilemede sayacın artmasını istemiyorsanız, IP bazlı kontrol ile bu işlemi daha sağlıklı hâle getirebilirsiniz. Bu yazıda, 3 farklı yöntemle bu işlemi nasıl yapabileceğinizi anlatacağım:

1. Session ile IP Kontrolü

Laravel’de kullanıcı IP adresini session içine kaydederek, aynı IP adresinden gelen tekrarlı görüntülemelerin sayılmasını engelleyebilirsiniz:

public function blogShow(Request $request, $slug, ActionController $action) {
    $post = Posts::where('slug', $slug)->firstOrFail();

    $userIp = $request->ip();
    $sessionKey = 'viewed_post_' . $post->id;

    if (!session()->has($sessionKey) || session()->get($sessionKey) !== $userIp) {
        $views_count = $action->PlusViews($post);
        session()->put($sessionKey, $userIp);
    } else {
        $views_count = $post->views;
    }

    return view('blog.show', compact('post', 'views_count'));
}

Bu yöntemin dezavantajı, session sadece tarayıcı açık kaldığı sürece geçerli olur. Kullanıcı tarayıcıyı kapatıp yeniden açarsa sayaç tekrar artabilir.

2. Laravel Cache ile IP Bazlı Kontrol

Daha uzun süreli ve kontrollü bir çözüm için Laravel’in cache sistemini kullanabilirsiniz. Aşağıdaki örnekte, aynı IP adresinden gelen istekler 60 dakika boyunca bir daha sayılmaz:

public function blogShow(Request $request, $slug, ActionController $action) {
    $post = Posts::where('slug', $slug)->firstOrFail();

    $userIp = $request->ip();
    $cacheKey = 'viewed_post_' . $post->id . '_ip_' . $userIp;

    if (!cache()->has($cacheKey)) {
        $views_count = $action->PlusViews($post);
        cache()->put($cacheKey, true, now()->addMinutes(60));
    } else {
        $views_count = $post->views;
    }

    return view('blog.show', compact('post', 'views_count'));
}

Bu yöntem session bağımsız çalışır ve daha sağlıklı bir sonuç verir.

3. Redis ile Hızlı ve Performanslı Sayaç

.env dosyanızda şu satır yer almalı:

CACHE_DRIVER=redis

Redis kullanıyorsanız, IP adresine göre görüntülenme kontrolünü çok daha hızlı ve ölçeklenebilir şekilde yapabilirsiniz. Aşağıdaki örnekte Redis veritabanına bir IP anahtarı ekleniyor ve bu IP’den 60 dakika boyunca gelen tekrar görüntülemeler sayılmıyor:

use Illuminate\Support\Facades\Redis;

public function blogShow(Request $request, $slug, ActionController $action) {
    $post = Posts::where('slug', $slug)->firstOrFail();

    $userIp = $request->ip();
    $cacheKey = 'views:post:' . $post->id . ':ip:' . $userIp;

    if (!Redis::exists($cacheKey)) {
        $views_count = $action->PlusViews($post);
        Redis::setex($cacheKey, 3600, true); // 3600 saniye = 60 dakika
    } else {
        $views_count = $post->views;
    }

    return view('blog.show', compact('post', 'views_count'));
}

Redis sayesinde çok sayıda kullanıcıya sahip projelerde bile yük oluşmaz ve sayaç kontrolü neredeyse anlık yapılır.

Sonuç

Bu yöntemlerle Laravel projenizde blog gönderilerinizin görüntülenme sayılarını daha gerçekçi bir şekilde sayabilirsiniz. Redis ile yapılan kontrol, özellikle yoğun trafik alan siteler için önerilir.

Loading
svg

Quick Navigation

  • 1

    Laravel Blog Görüntülenme Sayacı: IP ve Redis Cache ile Kontrol