{"id":39789,"date":"2026-02-23T23:41:32","date_gmt":"2026-02-23T20:41:32","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=39789"},"modified":"2026-02-23T23:41:32","modified_gmt":"2026-02-23T20:41:32","slug":"giris-web-sitesi-hit-sayaci-nedir-ve-neden-redis-kullanmaliyiz","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/giris-web-sitesi-hit-sayaci-nedir-ve-neden-redis-kullanmaliyiz\/","title":{"rendered":"Giri\u015f: Web Sitesi Hit Sayac\u0131 Nedir ve Neden Redis Kullanmal\u0131y\u0131z?"},"content":{"rendered":"<p><body><\/p>\n<h2>Giri\u015f: Web Sitesi Hit Sayac\u0131 Nedir ve Neden Redis Kullanmal\u0131y\u0131z?<\/h2>\n<p>Bir web sitesi hit sayac\u0131, sitenizi ziyaret eden kullan\u0131c\u0131 say\u0131s\u0131n\u0131 veya belirli bir sayfan\u0131n ka\u00e7 kez g\u00f6r\u00fcnt\u00fclendi\u011fini takip eden basit ama etkili bir ara\u00e7t\u0131r. Geleneksel olarak, bu t\u00fcr saya\u00e7lar genellikle bir veritaban\u0131 (MySQL gibi) veya dosya sistemine (metin dosyas\u0131) dayan\u0131r. Ancak, y\u00fcksek trafikli sitelerde bu y\u00f6ntemler performans darbo\u011fazlar\u0131na yol a\u00e7abilir:<\/p>\n<p>*   <strong>Veritaban\u0131 Y\u00fck\u00fc:<\/strong> Her sayfa y\u00fcklemesinde veritaban\u0131na yazma i\u015flemi, veritaban\u0131 sunucusunda \u00f6nemli bir y\u00fck olu\u015fturabilir ve yan\u0131t s\u00fcrelerini yava\u015flatabilir.<br \/>\n*   <strong>Dosya Okuma\/Yazma:<\/strong> Dosya tabanl\u0131 \u00e7\u00f6z\u00fcmler, disk G\/\u00c7 i\u015flemleri nedeniyle yava\u015f olabilir ve e\u015fzamanl\u0131 eri\u015fimde kilitlenme sorunlar\u0131 ya\u015fayabilir.<\/p>\n<p>\u0130\u015fte tam bu noktada Redis devreye giriyor. Redis, a\u00e7\u0131k kaynakl\u0131, bellek i\u00e7i bir veri yap\u0131s\u0131 deposudur. Bir veritaban\u0131, \u00f6nbellek ve mesaj arac\u0131s\u0131 olarak kullan\u0131labilir. Redis&#8217;in hit sayac\u0131 i\u00e7in ideal olmas\u0131n\u0131n ba\u015fl\u0131ca nedenleri \u015funlard\u0131r:<\/p>\n<p>*   <strong>H\u0131z:<\/strong> Verileri bellekte tuttu\u011fu i\u00e7in inan\u0131lmaz derecede h\u0131zl\u0131 okuma ve yazma i\u015flemleri sunar.<br \/>\n*   <strong>Atomik \u0130\u015flemler:<\/strong> Saya\u00e7 art\u0131rma (INCR) gibi i\u015flemler atomik olarak ger\u00e7ekle\u015ftirilir, bu da e\u015fzamanl\u0131 eri\u015fimlerde veri tutarl\u0131l\u0131\u011f\u0131n\u0131 garanti eder.<br \/>\n*   <strong>Basit Veri Yap\u0131lar\u0131:<\/strong> String, Hash, List, Set, Sorted Set gibi \u00e7e\u015fitli veri yap\u0131lar\u0131 sunar. Saya\u00e7lar i\u00e7in String veya Set (benzersiz ziyaret\u00e7iler i\u00e7in) idealdir.<br \/>\n*   <strong>D\u00fc\u015f\u00fck Gecikme:<\/strong> A\u011f gecikmesi minimumdur, bu da her sayfa y\u00fcklemesinde h\u0131zl\u0131 bir \u015fekilde saya\u00e7 g\u00fcncellemeyi m\u00fcmk\u00fcn k\u0131lar.<\/p>\n<p>Bu rehberde, PHP&#8217;yi kullanarak Ubuntu 20.04 \u00fczerinde Redis destekli, h\u0131zl\u0131 ve \u00f6l\u00e7eklenebilir bir web sitesi hit sayac\u0131n\u0131 nas\u0131l kuraca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m g\u00f6sterece\u011fiz.<\/p>\n<h2>Ortam Kurulumu: Ubuntu 20.04 \u00dczerinde Gerekli Bile\u015fenlerin Haz\u0131rlanmas\u0131<\/h2>\n<p>Hit sayac\u0131m\u0131z\u0131 kurmaya ba\u015flamadan \u00f6nce, Ubuntu 20.04 sunucumuzda gerekli yaz\u0131l\u0131mlar\u0131 y\u00fcklememiz ve yap\u0131land\u0131rmam\u0131z gerekiyor.<\/p>\n<h3>Sistem G\u00fcncelleme<\/h3>\n<p>\u0130lk olarak, sunucunuzdaki paket listelerini g\u00fcncelleyelim ve mevcut paketleri y\u00fckseltelim:<\/p>\n<pre><code class=\"language-bash\">sudo apt update\nsudo apt upgrade -y<\/code><\/pre>\n<h3>Nginx Web Sunucusu Kurulumu<\/h3>\n<p>Web sitenizi bar\u0131nd\u0131rmak i\u00e7in Nginx&#8217;i kullanaca\u011f\u0131z. Nginx, y\u00fcksek performansl\u0131 ve hafif bir web sunucusudur.<\/p>\n<pre><code class=\"language-bash\">sudo apt install nginx -y<\/code><\/pre>\n<p>Kurulumdan sonra Nginx servisinin \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olun:<\/p>\n<pre><code class=\"language-bash\">sudo systemctl start nginx\nsudo systemctl enable nginx\nsudo systemctl status nginx<\/code><\/pre>\n<p>E\u011fer bir g\u00fcvenlik duvar\u0131 (UFW) kullan\u0131yorsan\u0131z, Nginx&#8217;e gelen HTTP (80) ve HTTPS (443) trafi\u011fine izin vermeniz gerekebilir:<\/p>\n<pre><code class=\"language-bash\">sudo ufw allow 'Nginx HTTP'\nsudo ufw allow 'Nginx HTTPS' # E\u011fer SSL kullanacaksan\u0131z\nsudo ufw enable # E\u011fer UFW etkin de\u011filse<\/code><\/pre>\n<h3>PHP ve Gerekli Mod\u00fcllerin Kurulumu<\/h3>\n<p>Web sitesi mant\u0131\u011f\u0131m\u0131z\u0131 PHP ile yazaca\u011f\u0131z. Nginx ile PHP&#8217;nin d\u00fczg\u00fcn \u00e7al\u0131\u015fmas\u0131 i\u00e7in <code>php-fpm<\/code>&#8216;e ve Redis ile ileti\u015fim kurmak i\u00e7in <code>php-redis<\/code> mod\u00fcl\u00fcne ihtiyac\u0131m\u0131z var.<\/p>\n<pre><code class=\"language-bash\">sudo apt install php-fpm php-cli php-redis -y<\/code><\/pre>\n<p>Kurulumdan sonra PHP-FPM servisinin \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olun:<\/p>\n<pre><code class=\"language-bash\">sudo systemctl start php7.4-fpm # Ubuntu 20.04 varsay\u0131lan PHP s\u00fcr\u00fcm\u00fc 7.4't\u00fcr.\nsudo systemctl enable php7.4-fpm\nsudo systemctl status php7.4-fpm<\/code><\/pre>\n<h3>Redis Sunucusu Kurulumu<\/h3>\n<p>\u015eimdi Redis sunucusunu kural\u0131m.<\/p>\n<pre><code class=\"language-bash\">sudo apt install redis-server -y<\/code><\/pre>\n<p>Redis servisinin \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olun:<\/p>\n<pre><code class=\"language-bash\">sudo systemctl start redis-server\nsudo systemctl enable redis-server\nsudo systemctl status redis-server<\/code><\/pre>\n<p>Redis&#8217;in d\u00fczg\u00fcn \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 test etmek i\u00e7in <code>redis-cli<\/code> komutunu kullanabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">redis-cli ping\n<h2>\u00c7\u0131kt\u0131 olarak PONG almal\u0131s\u0131n\u0131z.<\/code><\/pre>\n<\/h2>\n<h4>Redis G\u00fcvenli\u011fi (\u0130ste\u011fe Ba\u011fl\u0131 ama \u00d6nemli)<\/h4>\n<p>Varsay\u0131lan olarak Redis, \u015fifre korumas\u0131 olmadan \u00e7al\u0131\u015f\u0131r. \u00dcretim ortamlar\u0131nda Redis&#8217;i g\u00fcvence alt\u0131na alman\u0131z \u015fiddetle tavsiye edilir. Redis yap\u0131land\u0131rma dosyas\u0131n\u0131 d\u00fczenleyerek bir parola belirleyebilirsiniz:<\/p>\n<pre><code class=\"language-bash\">sudo nano \/etc\/redis\/redis.conf<\/code><\/pre>\n<p>Dosya i\u00e7inde <code>requirepass<\/code> kelimesini aray\u0131n ve yorum sat\u0131r\u0131n\u0131 kald\u0131rarak g\u00fc\u00e7l\u00fc bir parola belirleyin:<\/p>\n<pre><code class=\"language-\"># requirepass foobared\nrequirepass SizinGucluParolanizBurada<\/code><\/pre>\n<p>De\u011fi\u015fiklikleri kaydedip \u00e7\u0131kt\u0131ktan sonra Redis servisini yeniden ba\u015flat\u0131n:<\/p>\n<pre><code class=\"language-bash\">sudo systemctl restart redis-server<\/code><\/pre>\n<p>Art\u0131k Redis&#8217;e ba\u011flan\u0131rken parolan\u0131z\u0131 kullanman\u0131z gerekecek:<\/p>\n<pre><code class=\"language-bash\">redis-cli -a SizinGucluParolanizBurada<\/code><\/pre>\n<h2>Hit Sayac\u0131 Mant\u0131\u011f\u0131n\u0131n PHP ve Redis ile Uygulanmas\u0131<\/h2>\n<p>\u015eimdi PHP ve Redis kullanarak saya\u00e7 mant\u0131\u011f\u0131n\u0131 olu\u015ftural\u0131m. \u0130ki t\u00fcr say\u0131m yapaca\u011f\u0131z: toplam sayfa g\u00f6r\u00fcnt\u00fclemesi ve benzersiz ziyaret\u00e7i say\u0131s\u0131 (IP adresine g\u00f6re).<\/p>\n<h3>PHP Hit Sayac\u0131 Dosyas\u0131n\u0131 Olu\u015fturma<\/h3>\n<p>Web sunucunuzun k\u00f6k dizininde (genellikle <code>\/var\/www\/html\/<\/code> veya \u00f6zel bir sanal host dizini) <code>counter.php<\/code> ad\u0131nda bir dosya olu\u015ftural\u0131m.<\/p>\n<pre><code class=\"language-bash\">sudo nano \/var\/www\/html\/counter.php<\/code><\/pre>\n<p>\u0130\u00e7eri\u011fini a\u015fa\u011f\u0131daki gibi doldurun:<\/p>\n<pre><code class=\"language-php\"><?php\n\/\/ Hata raporlamay\u0131 etkinle\u015ftirin (geli\u015ftirme ortam\u0131 i\u00e7in)\nini_set('display_errors', 1);\nini_set('display_startup_errors', 1);\nerror_reporting(E_ALL);\n\nheader('Content-Type: application\/json'); \/\/ JSON format\u0131nda yan\u0131t d\u00f6nece\u011fiz.\n\n\/\/ Redis ba\u011flant\u0131 bilgileri\n$redisHost = '127.0.0.1';\n$redisPort = 6379;\n$redisPassword = 'SizinGucluParolanizBurada'; \/\/ E\u011fer Redis'e parola koyduysan\u0131z buraya yaz\u0131n\n\n\/\/ Saya\u00e7 anahtarlar\u0131\n$totalHitsKey = 'website:total_hits';\n$uniqueVisitorsKey = 'website:unique_visitors';\n\ntry {\n    $redis = new Redis();\n    $redis->connect($redisHost, $redisPort);\n\n    \/\/ E\u011fer parola varsa, kimlik do\u011frulamas\u0131 yap\u0131n\n    if (!empty($redisPassword)) {\n        $redis->auth($redisPassword);\n    }\n\n    \/\/ Toplam hit say\u0131s\u0131n\u0131 art\u0131r\n    $totalHits = $redis->incr($totalHitsKey);\n\n    \/\/ Benzersiz ziyaret\u00e7i say\u0131s\u0131n\u0131 kaydet (IP adresine g\u00f6re)\n    $visitorIp = $_SERVER['REMOTE_ADDR'] ?? 'UNKNOWN_IP'; \/\/ Kullan\u0131c\u0131n\u0131n IP adresini al\n    $redis->sAdd($uniqueVisitorsKey, $visitorIp); \/\/ IP'yi benzersiz k\u00fcmesine ekle\n\n    \/\/ Benzersiz ziyaret\u00e7i say\u0131s\u0131n\u0131 al\n    $uniqueVisitors = $redis->sCard($uniqueVisitorsKey);\n\n    \/\/ Ba\u015far\u0131l\u0131 yan\u0131t\n    echo json_encode([\n        'status' => 'success',\n        'total_hits' => $totalHits,\n        'unique_visitors' => $uniqueVisitors\n    ]);\n\n} catch (RedisException $e) {\n    \/\/ Redis ba\u011flant\u0131 veya i\u015flem hatas\u0131\n    http_response_code(500); \/\/ Internal Server Error\n    echo json_encode([\n        'status' => 'error',\n        'message' => 'Redis hatas\u0131: ' . $e->getMessage()\n    ]);\n} catch (Exception $e) {\n    \/\/ Di\u011fer genel hatalar\n    http_response_code(500);\n    echo json_encode([\n        'status' => 'error',\n        'message' => 'Genel hata: ' . $e->getMessage()\n    ]);\n}\n\n?><\/code><\/pre>\n<p><strong>Kod A\u00e7\u0131klamas\u0131:<\/strong><\/p>\n<p>*   <strong><code>header('Content-Type: application\/json');<\/code><\/strong>: Bu, taray\u0131c\u0131ya veya \u00e7a\u011f\u0131ran uygulamaya bir JSON yan\u0131t\u0131 g\u00f6nderdi\u011fimizi bildirir.<br \/>\n*   <strong>Redis Ba\u011flant\u0131s\u0131<\/strong>: <code>new Redis()<\/code> ile bir Redis istemcisi olu\u015fturulur ve <code>connect()<\/code> ile sunucuya ba\u011flan\u0131l\u0131r. E\u011fer Redis&#8217;e parola koyduysan\u0131z, <code>auth()<\/code> metoduyla kimlik do\u011frulamas\u0131 yap\u0131lmas\u0131 zorunludur.<br \/>\n*   <strong><code>$totalHitsKey<\/code><\/strong>: Toplam sayfa g\u00f6r\u00fcnt\u00fclemesini tutan Redis anahtar\u0131.<br \/>\n*   <strong><code>$uniqueVisitorsKey<\/code><\/strong>: Benzersiz ziyaret\u00e7ilerin IP adreslerini tutan Redis Set anahtar\u0131.<br \/>\n*   <strong><code>$redis->incr($totalHitsKey);<\/code><\/strong>: Redis&#8217;teki <code>$totalHitsKey<\/code> de\u011ferini atomik olarak bir art\u0131r\u0131r ve yeni de\u011feri d\u00f6nd\u00fcr\u00fcr. E\u011fer anahtar yoksa, 0 olarak ba\u015flat\u0131r ve sonra 1&#8217;e art\u0131r\u0131r.<br \/>\n*   <strong><code>$_SERVER['REMOTE_ADDR']<\/code><\/strong>: Ziyaret\u00e7inin IP adresini almak i\u00e7in kullan\u0131l\u0131r.<br \/>\n*   <strong><code>$redis->sAdd($uniqueVisitorsKey, $visitorIp);<\/code><\/strong>: <code>$uniqueVisitorsKey<\/code> adl\u0131 Redis Set&#8217;ine ziyaret\u00e7inin IP adresini ekler. Set&#8217;ler sadece benzersiz elemanlar\u0131 tuttu\u011fu i\u00e7in, ayn\u0131 IP birden fazla kez eklense bile Set i\u00e7inde sadece bir kez bulunur.<br \/>\n*   <strong><code>$redis->sCard($uniqueVisitorsKey);<\/code><\/strong>: <code>$uniqueVisitorsKey<\/code> adl\u0131 Redis Set&#8217;indeki eleman say\u0131s\u0131n\u0131 (yani benzersiz ziyaret\u00e7i say\u0131s\u0131n\u0131) d\u00f6nd\u00fcr\u00fcr.<br \/>\n*   <strong><code>json_encode(...)<\/code><\/strong>: PHP dizisini JSON format\u0131na d\u00f6n\u00fc\u015ft\u00fcrerek istemciye g\u00f6nderir.<br \/>\n*   <strong><code>try-catch<\/code> bloklar\u0131<\/strong>: Redis ba\u011flant\u0131 veya di\u011fer olas\u0131 hatalar\u0131 yakalamak ve kullan\u0131c\u0131ya anlaml\u0131 bir hata mesaj\u0131 sunmak i\u00e7in kullan\u0131l\u0131r.<\/p>\n<p>Dosyay\u0131 kaydettikten sonra, PHP-FPM&#8217;in bu dosyay\u0131 okuyabilmesi i\u00e7in do\u011fru dosya izinlerine sahip oldu\u011fundan emin olun:<\/p>\n<pre><code class=\"language-bash\">sudo chown www-data:www-data \/var\/www\/html\/counter.php\nsudo chmod 644 \/var\/www\/html\/counter.php<\/code><\/pre>\n<h2>Web Sitenize Sayac\u0131 Entegre Etme ve G\u00f6r\u00fcnt\u00fcleme<\/h2>\n<p>\u015eimdi olu\u015fturdu\u011fumuz <code>counter.php<\/code> dosyas\u0131n\u0131 Nginx \u00fczerinden eri\u015filebilir hale getirece\u011fiz ve web sitemizin ana sayfas\u0131nda bu saya\u00e7 de\u011ferlerini g\u00f6r\u00fcnt\u00fcleyece\u011fiz.<\/p>\n<h3>Nginx Sanal Host Yap\u0131land\u0131rmas\u0131<\/h3>\n<p>Nginx&#8217;in PHP dosyalar\u0131n\u0131 i\u015fleyebilmesi i\u00e7in bir yap\u0131land\u0131rma yapmam\u0131z gerekiyor. Varsay\u0131lan Nginx yap\u0131land\u0131rma dosyas\u0131n\u0131 d\u00fczenleyebilir veya yeni bir sanal host olu\u015fturabilirsiniz. Biz varsay\u0131lan\u0131 d\u00fczenleyelim:<\/p>\n<pre><code class=\"language-bash\">sudo nano \/etc\/nginx\/sites-available\/default<\/code><\/pre>\n<p><code>server<\/code> blo\u011fu i\u00e7inde, <code>location ~ \\.php$<\/code> blo\u011funu bulun veya ekleyin. <code>root<\/code> direktifinin <code>\/var\/www\/html<\/code> oldu\u011fundan ve <code>fastcgi_pass<\/code> ayar\u0131n\u0131n <code>php-fpm<\/code> soketine i\u015faret etti\u011finden emin olun.<\/p>\n<pre><code class=\"language-nginx\">server {\n    listen 80 default_server;\n    listen [::]:80 default_server;\n\n    root \/var\/www\/html;\n    index index.html index.htm index.nginx-debian.html index.php; # index.php'yi ekleyin\n\n    server_name _;\n\n    location \/ {\n        try_files $uri $uri\/ =404;\n    }\n\n    # PHP dosyalar\u0131n\u0131 i\u015flemek i\u00e7in bu blo\u011fu ekleyin veya g\u00fcncelleyin\n    location ~ \\.php$ {\n        include snippets\/fastcgi-php.conf;\n        fastcgi_pass unix:\/var\/run\/php\/php7.4-fpm.sock; # PHP s\u00fcr\u00fcm\u00fcn\u00fcze g\u00f6re g\u00fcncelleyin\n    }\n\n    # Di\u011fer Nginx yap\u0131land\u0131rmalar\u0131...\n}<\/code><\/pre>\n<p>Yap\u0131land\u0131rma dosyas\u0131n\u0131 kaydedip \u00e7\u0131kt\u0131ktan sonra, Nginx yap\u0131land\u0131rmas\u0131n\u0131n s\u00f6zdizimini kontrol edin ve servisi yeniden ba\u015flat\u0131n:<\/p>\n<pre><code class=\"language-bash\">sudo nginx -t\nsudo systemctl reload nginx<\/code><\/pre>\n<h3>HTML Sayfas\u0131nda Sayac\u0131 G\u00f6r\u00fcnt\u00fcleme<\/h3>\n<p>\u015eimdi <code>index.php<\/code> (veya <code>index.html<\/code>) dosyan\u0131z\u0131 olu\u015fturarak veya d\u00fczenleyerek saya\u00e7 verilerini g\u00f6r\u00fcnt\u00fcleyelim. <code>counter.php<\/code> dosyas\u0131ndan gelen JSON verilerini JavaScript ile al\u0131p HTML sayfan\u0131za yerle\u015ftirece\u011fiz. Bu y\u00f6ntem, sayfan\u0131n geri kalan\u0131n\u0131 engellemeden sayac\u0131 dinamik olarak g\u00fcncellemenizi sa\u011flar.<\/p>\n<pre><code class=\"language-bash\">sudo nano \/var\/www\/html\/index.php<\/code><\/pre>\n<p>\u0130\u00e7eri\u011fini a\u015fa\u011f\u0131daki gibi doldurun:<\/p>\n<pre><code class=\"language-php\"><!DOCTYPE html>\n<html lang=\"tr\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Redis Hit Sayac\u0131 \u00d6rne\u011fi<\/title>\n    <style>\n        body {\n            font-family: Arial, sans-serif;\n            margin: 40px;\n            background-color: #f4f4f4;\n            color: #333;\n        }\n        .container {\n            background-color: #fff;\n            padding: 20px;\n            border-radius: 8px;\n            box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n            max-width: 600px;\n            margin: 0 auto;\n            text-align: center;\n        }\n        h1 {\n            color: #0056b3;\n        }\n        .counter-display {\n            font-size: 2em;\n            font-weight: bold;\n            color: #28a745;\n            margin: 10px 0;\n        }\n        .unique-display {\n            font-size: 1.2em;\n            color: #6c757d;\n        }\n        .error-message {\n            color: #dc3545;\n            font-weight: bold;\n        }\n    <\/style>\n<\/head>\n<body>\n    <div class=\"container\">\n        \n        <p>Bu sayfa Redis destekli bir hit sayac\u0131 kullanmaktad\u0131r.<\/p>\n\n        <h3>Toplam Ziyaret Say\u0131s\u0131:<\/h3>\n        <div id=\"totalHits\" class=\"counter-display\">Y\u00fckleniyor...<\/div>\n\n        <h3>Benzersiz Ziyaret\u00e7i Say\u0131s\u0131:<\/h3>\n        <div id=\"uniqueVisitors\" class=\"unique-display\">Y\u00fckleniyor...<\/div>\n\n        <div id=\"errorMessage\" class=\"error-message\"><\/div>\n    <\/div>\n\n    <script>\n        document.addEventListener('DOMContentLoaded', function() {\n            fetch('\/counter.php') \/\/ counter.php dosyas\u0131n\u0131 \u00e7a\u011f\u0131r\n                .then(response => {\n                    if (!response.ok) {\n                        throw new Error('Network response was not ok ' + response.statusText);\n                    }\n                    return response.json();\n                })\n                .then(data => {\n                    if (data.status === 'success') {\n                        document.getElementById('totalHits').innerText = data.total_hits;\n                        document.getElementById('uniqueVisitors').innerText = data.unique_visitors;\n                    } else {\n                        document.getElementById('errorMessage').innerText = 'Saya\u00e7 y\u00fcklenirken bir hata olu\u015ftu: ' + data.message;\n                        document.getElementById('totalHits').innerText = 'Hata!';\n                        document.getElementById('uniqueVisitors').innerText = 'Hata!';\n                    }\n                })\n                .catch(error => {\n                    document.getElementById('errorMessage').innerText = 'Fetch hatas\u0131: ' + error.message;\n                    document.getElementById('totalHits').innerText = 'Hata!';\n                    document.getElementById('uniqueVisitors').innerText = 'Hata!';\n                    console.error('There has been a problem with your fetch operation:', error);\n                });\n        });\n    <\/script>\n<\/body>\n<\/html><\/code><\/pre>\n<p><strong>Kod A\u00e7\u0131klamas\u0131:<\/strong><\/p>\n<p>*   <strong><code>index.php<\/code><\/strong>: Art\u0131k Nginx yap\u0131land\u0131rmam\u0131z sayesinde <code>index.php<\/code> dosyalar\u0131 otomatik olarak PHP-FPM taraf\u0131ndan i\u015flenecek.<br \/>\n*   <strong><code>fetch('\/counter.php')<\/code><\/strong>: JavaScript <code>fetch<\/code> API&#8217;si kullanarak <code>counter.php<\/code> dosyas\u0131n\u0131 asenkron olarak \u00e7a\u011f\u0131r\u0131r. Bu, sayfa y\u00fcklenirken sayfa i\u00e7eri\u011finin g\u00f6sterilmesini engellemez.<br \/>\n*   <strong><code>.then(response => response.json())<\/code><\/strong>: Sunucudan gelen yan\u0131t\u0131 JSON olarak ayr\u0131\u015ft\u0131r\u0131r.<br \/>\n*   <strong><code>.then(data => {...})<\/code><\/strong>: JSON verilerini ald\u0131ktan sonra <code>totalHits<\/code> ve <code>uniqueVisitors<\/code> div&#8217;lerini g\u00fcnceller.<br \/>\n*   <strong><code>.catch(error => {...})<\/code><\/strong>: A\u011f hatalar\u0131n\u0131 veya JSON ayr\u0131\u015ft\u0131rma hatalar\u0131n\u0131 yakalar ve bir hata mesaj\u0131 g\u00f6sterir.<\/p>\n<p>Dosyay\u0131 kaydedin ve web taray\u0131c\u0131n\u0131zdan sunucunuzun IP adresini veya alan ad\u0131n\u0131 ziyaret edin. Her sayfa yenilemesinde &#8220;Toplam Ziyaret Say\u0131s\u0131&#8221;n\u0131n artt\u0131\u011f\u0131n\u0131 ve farkl\u0131 IP adreslerinden yap\u0131lan ziyaretlerde &#8220;Benzersiz Ziyaret\u00e7i Say\u0131s\u0131&#8221;n\u0131n da artt\u0131\u011f\u0131n\u0131 g\u00f6receksiniz.<\/p>\n<h2>Geli\u015fmi\u015f Konular, Optimizasyonlar ve S\u0131k\u00e7a Sorulan Sorular<\/h2>\n<p>Saya\u00e7 sisteminiz art\u0131k \u00e7al\u0131\u015f\u0131r durumda. Ancak, daha sa\u011flam ve y\u00f6netilebilir hale getirmek i\u00e7in baz\u0131 ek konular\u0131 g\u00f6z \u00f6n\u00fcnde bulundurmak \u00f6nemlidir.<\/p>\n<h3>Saya\u00e7 S\u0131f\u0131rlama veya Y\u00f6netimi<\/h3>\n<p>Saya\u00e7 de\u011ferlerini Redis CLI \u00fczerinden kolayca y\u00f6netebilirsiniz.<\/p>\n<p>*   <strong>Toplam Hit Sayac\u0131n\u0131 S\u0131f\u0131rlama:<\/strong><\/p>\n<pre><code class=\"language-bash\">redis-cli -a SizinGucluParolanizBurada DEL website:total_hits<\/code><\/pre>\n<p>*   <strong>Benzersiz Ziyaret\u00e7i Sayac\u0131n\u0131 S\u0131f\u0131rlama:<\/strong><\/p>\n<pre><code class=\"language-bash\">redis-cli -a SizinGucluParolanizBurada DEL website:unique_visitors<\/code><\/pre>\n<p>*   <strong>Mevcut De\u011ferleri G\u00f6rme:<\/strong><\/p>\n<pre><code class=\"language-bash\">redis-cli -a SizinGucluParolanizBurada GET website:total_hits\n    redis-cli -a SizinGucluParolanizBurada SCARD website:unique_visitors\n    redis-cli -a SizinGucluParolanizBurada SMEMBERS website:unique_visitors # T\u00fcm benzersiz IP'leri g\u00f6rmek i\u00e7in<\/code><\/pre>\n<h3>Performans ve \u00d6l\u00e7eklenebilirlik \u0130pu\u00e7lar\u0131<\/h3>\n<p>*   <strong>Redis Kal\u0131c\u0131l\u0131\u011f\u0131:<\/strong> Redis varsay\u0131lan olarak verileri bellekte tutar, ancak sunucu yeniden ba\u015flat\u0131ld\u0131\u011f\u0131nda veriler kaybolabilir. Verilerin kaybolmamas\u0131 i\u00e7in Redis&#8217;in kal\u0131c\u0131l\u0131k mekanizmalar\u0131n\u0131 (RDB Snapshotting veya AOF &#8211; Append Only File) etkinle\u015ftirmeyi d\u00fc\u015f\u00fcnebilirsiniz. Bu ayarlar <code>\/etc\/redis\/redis.conf<\/code> dosyas\u0131nda bulunur.<br \/>\n*   <strong>Redis Ba\u011flant\u0131 Havuzlar\u0131:<\/strong> \u00c7ok y\u00fcksek trafikli uygulamalarda, her istekte yeni bir Redis ba\u011flant\u0131s\u0131 a\u00e7mak yerine bir ba\u011flant\u0131 havuzu kullanmak performans\u0131 art\u0131rabilir. Ancak PHP i\u00e7in bu genellikle daha karma\u015f\u0131kt\u0131r ve \u00e7o\u011fu durumda gereksizdir.<br \/>\n*   <strong>\u00d6nbellekleme:<\/strong> E\u011fer sayfa g\u00f6r\u00fcnt\u00fcleme say\u0131s\u0131 anl\u0131k olmak zorunda de\u011filse, saya\u00e7 de\u011ferini belirli aral\u0131klarla (\u00f6rne\u011fin her 5 saniyede bir) \u00f6nbelle\u011fe alarak Redis&#8217;e yap\u0131lan istek say\u0131s\u0131n\u0131 azaltabilirsiniz.<\/p>\n<h3>G\u00fcvenlik \u0130pu\u00e7lar\u0131<\/h3>\n<p>*   <strong>Redis Parolas\u0131:<\/strong> Redis sunucunuza g\u00fc\u00e7l\u00fc bir parola belirlemek, yetkisiz eri\u015fimi engellemenin en temel yoludur.<br \/>\n*   <strong>G\u00fcvenlik Duvar\u0131 (UFW):<\/strong> Redis&#8217;in sadece web sunucunuzdan (veya PHP uygulamas\u0131n\u0131n \u00e7al\u0131\u015ft\u0131\u011f\u0131 sunucudan) eri\u015filebilir oldu\u011fundan emin olun. Varsay\u0131lan Redis portu olan 6379&#8217;u sadece <code>localhost<\/code>&#8216;a veya belirli bir IP adresine a\u00e7\u0131n.<\/p>\n<pre><code class=\"language-bash\">sudo ufw allow from 127.0.0.1 to any port 6379\n    # Veya belirli bir IP'den:\n    # sudo ufw allow from SizinWebSunucusuIPAdresiniz to any port 6379<\/code><\/pre>\n<p>*   <strong>PHP Dosya \u0130zinleri:<\/strong> Web sunucunuzdaki PHP dosyalar\u0131n\u0131n do\u011fru izinlere sahip oldu\u011fundan emin olun (<code>644<\/code> dosyalar i\u00e7in, <code>755<\/code> dizinler i\u00e7in).<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Bu rehberde, Ubuntu 20.04 \u00fczerinde Nginx, PHP ve Redis kullanarak h\u0131zl\u0131 ve verimli bir web sitesi hit sayac\u0131n\u0131 nas\u0131l kuraca\u011f\u0131n\u0131z\u0131 \u00f6\u011frendiniz. Redis&#8217;in h\u0131z\u0131 ve veri yap\u0131s\u0131 yetenekleri sayesinde, geleneksel veritaban\u0131 tabanl\u0131 \u00e7\u00f6z\u00fcmlere g\u00f6re \u00e7ok daha performansl\u0131 bir saya\u00e7 sistemine sahip olabilirsiniz. Bu temel yap\u0131land\u0131rmay\u0131 kendi web sitelerinize kolayca entegre edebilir ve ihtiya\u00e7lar\u0131n\u0131za g\u00f6re geli\u015ftirebilirsiniz.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<p><strong>S1: Redis kal\u0131c\u0131l\u0131\u011f\u0131 nedir ve neden \u00f6nemlidir?<\/strong><br \/>\nC1: Redis kal\u0131c\u0131l\u0131\u011f\u0131, bellekte tutulan verilerin sunucu yeniden ba\u015flat\u0131ld\u0131\u011f\u0131nda veya Redis servisi durdu\u011funda kaybolmamas\u0131n\u0131 sa\u011flayan mekanizmad\u0131r. RDB (Snapshotting) ve AOF (Append Only File) olmak \u00fczere iki ana kal\u0131c\u0131l\u0131k modu vard\u0131r. Hit sayac\u0131 gibi verilerin kaybolmas\u0131n\u0131 istemiyorsan\u0131z, \u00fcretim ortam\u0131nda kal\u0131c\u0131l\u0131\u011f\u0131 yap\u0131land\u0131rmak \u00f6nemlidir.<\/p>\n<p><strong>S2: Saya\u00e7 neden artm\u0131yor?<\/strong><br \/>\nC2: Birka\u00e7 olas\u0131 neden olabilir:<br \/>\n    *   PHP-FPM veya Nginx servislerinin \u00e7al\u0131\u015fmamas\u0131.<br \/>\n    *   <code>counter.php<\/code> dosyas\u0131nda Redis ba\u011flant\u0131 bilgilerinin (host, port, parola) yanl\u0131\u015f olmas\u0131.<br \/>\n    *   <code>php-redis<\/code> mod\u00fcl\u00fcn\u00fcn y\u00fckl\u00fc olmamas\u0131.<br \/>\n    *   Nginx yap\u0131land\u0131rmas\u0131nda PHP dosyalar\u0131n\u0131n i\u015flenmesiyle ilgili bir sorun olmas\u0131.<br \/>\n    *   Redis sunucusunun \u00e7al\u0131\u015fmamas\u0131 veya g\u00fcvenlik duvar\u0131 taraf\u0131ndan engellenmesi.<br \/>\n    *   <code>counter.php<\/code> dosyas\u0131nda olu\u015fan bir PHP hatas\u0131 (hata raporlamay\u0131 etkinle\u015ftirerek kontrol edin).<\/p>\n<p><strong>S3: &#8220;Benzersiz ziyaret\u00e7i&#8221; ile &#8220;toplam ziyaret&#8221; aras\u0131ndaki fark nedir?<\/strong><br \/>\nC3: &#8220;Toplam ziyaret&#8221; (total hits), bir sayfan\u0131n ka\u00e7 kez g\u00f6r\u00fcnt\u00fclendi\u011fini g\u00f6sterir ve ayn\u0131 kullan\u0131c\u0131n\u0131n sayfay\u0131 birden fazla kez yenilemesiyle artar. &#8220;Benzersiz ziyaret\u00e7i&#8221; ise, belirli bir zaman dilimi i\u00e7inde sayfay\u0131 ziyaret eden farkl\u0131 kullan\u0131c\u0131lar\u0131n (genellikle IP adreslerine g\u00f6re belirlenir) say\u0131s\u0131n\u0131 g\u00f6sterir. Ayn\u0131 kullan\u0131c\u0131, sayfay\u0131 ka\u00e7 kez yenilerse yenilesin benzersiz ziyaret\u00e7i say\u0131s\u0131n\u0131 sadece bir kez art\u0131r\u0131r.<\/p>\n<p><strong>S4: Saya\u00e7 verisini nas\u0131l s\u0131f\u0131rlar\u0131m?<\/strong><br \/>\nC4: Redis CLI kullanarak ilgili anahtarlar\u0131 silebilirsiniz. \u00d6rne\u011fin, <code>redis-cli -a SizinParolaniz DEL website:total_hits<\/code> ve <code>redis-cli -a SizinParolaniz DEL website:unique_visitors<\/code> komutlar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rarak saya\u00e7lar\u0131 s\u0131f\u0131rlayabilirsiniz.<\/p>\n<p><strong>S5: Redis yerine ba\u015fka bir veritaban\u0131 kullanabilir miyim?<\/strong><br \/>\nC5: Evet, Redis yerine MySQL, PostgreSQL gibi ili\u015fkisel veritabanlar\u0131n\u0131 veya MongoDB gibi NoSQL veritabanlar\u0131n\u0131 kullanabilirsiniz. Ancak Redis, bellek i\u00e7i yap\u0131s\u0131, h\u0131z ve atomik i\u015flemleri nedeniyle saya\u00e7lar gibi s\u0131k g\u00fcncellenen veriler i\u00e7in genellikle daha performansl\u0131 bir se\u00e7enektir. Di\u011fer veritabanlar\u0131 genellikle daha y\u00fcksek gecikme s\u00fcrelerine ve daha fazla G\/\u00c7 y\u00fck\u00fcne neden olabilir.<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Giri\u015f: Web Sitesi Hit Sayac\u0131 Nedir ve Neden Redis Kullanmal\u0131y\u0131z?\nBir web sitesi hit sayac\u0131, sitenizi ziyaret eden kullan\u0131c\u0131 say\u0131s\u0131n\u0131 veya","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1404],"tags":[],"class_list":{"0":"post-39789","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-redis","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Giri\u015f: Web Sitesi Hit Sayac\u0131 Nedir ve Neden Redis Kullanmal\u0131y\u0131z? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/giris-web-sitesi-hit-sayaci-nedir-ve-neden-redis-kullanmaliyiz\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Giri\u015f: Web Sitesi Hit Sayac\u0131 Nedir ve Neden Redis Kullanmal\u0131y\u0131z?\" \/>\n<meta property=\"og:description\" content=\"Giri\u015f: Web Sitesi Hit Sayac\u0131 Nedir ve Neden Redis Kullanmal\u0131y\u0131z? Bir web sitesi hit sayac\u0131, sitenizi ziyaret eden kullan\u0131c\u0131 say\u0131s\u0131n\u0131 veya\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/giris-web-sitesi-hit-sayaci-nedir-ve-neden-redis-kullanmaliyiz\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-23T20:41:32+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/giris-web-sitesi-hit-sayaci-nedir-ve-neden-redis-kullanmaliyiz\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/giris-web-sitesi-hit-sayaci-nedir-ve-neden-redis-kullanmaliyiz\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Giri\u015f: Web Sitesi Hit Sayac\u0131 Nedir ve Neden Redis Kullanmal\u0131y\u0131z?\",\"datePublished\":\"2026-02-23T20:41:32+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/giris-web-sitesi-hit-sayaci-nedir-ve-neden-redis-kullanmaliyiz\/\"},\"wordCount\":1878,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Redis\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/giris-web-sitesi-hit-sayaci-nedir-ve-neden-redis-kullanmaliyiz\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/giris-web-sitesi-hit-sayaci-nedir-ve-neden-redis-kullanmaliyiz\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/giris-web-sitesi-hit-sayaci-nedir-ve-neden-redis-kullanmaliyiz\/\",\"name\":\"Giri\u015f: Web Sitesi Hit Sayac\u0131 Nedir ve Neden Redis Kullanmal\u0131y\u0131z? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-02-23T20:41:32+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/giris-web-sitesi-hit-sayaci-nedir-ve-neden-redis-kullanmaliyiz\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/giris-web-sitesi-hit-sayaci-nedir-ve-neden-redis-kullanmaliyiz\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/giris-web-sitesi-hit-sayaci-nedir-ve-neden-redis-kullanmaliyiz\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Giri\u015f: Web Sitesi Hit Sayac\u0131 Nedir ve Neden Redis Kullanmal\u0131y\u0131z?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Giri\u015f: Web Sitesi Hit Sayac\u0131 Nedir ve Neden Redis Kullanmal\u0131y\u0131z? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/giris-web-sitesi-hit-sayaci-nedir-ve-neden-redis-kullanmaliyiz\/","og_locale":"tr_TR","og_type":"article","og_title":"Giri\u015f: Web Sitesi Hit Sayac\u0131 Nedir ve Neden Redis Kullanmal\u0131y\u0131z?","og_description":"Giri\u015f: Web Sitesi Hit Sayac\u0131 Nedir ve Neden Redis Kullanmal\u0131y\u0131z? Bir web sitesi hit sayac\u0131, sitenizi ziyaret eden kullan\u0131c\u0131 say\u0131s\u0131n\u0131 veya","og_url":"https:\/\/fatihsoysal.com\/blog\/giris-web-sitesi-hit-sayaci-nedir-ve-neden-redis-kullanmaliyiz\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-02-23T20:41:32+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"11 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/giris-web-sitesi-hit-sayaci-nedir-ve-neden-redis-kullanmaliyiz\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/giris-web-sitesi-hit-sayaci-nedir-ve-neden-redis-kullanmaliyiz\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Giri\u015f: Web Sitesi Hit Sayac\u0131 Nedir ve Neden Redis Kullanmal\u0131y\u0131z?","datePublished":"2026-02-23T20:41:32+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/giris-web-sitesi-hit-sayaci-nedir-ve-neden-redis-kullanmaliyiz\/"},"wordCount":1878,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Redis"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/giris-web-sitesi-hit-sayaci-nedir-ve-neden-redis-kullanmaliyiz\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/giris-web-sitesi-hit-sayaci-nedir-ve-neden-redis-kullanmaliyiz\/","url":"https:\/\/fatihsoysal.com\/blog\/giris-web-sitesi-hit-sayaci-nedir-ve-neden-redis-kullanmaliyiz\/","name":"Giri\u015f: Web Sitesi Hit Sayac\u0131 Nedir ve Neden Redis Kullanmal\u0131y\u0131z? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-02-23T20:41:32+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/giris-web-sitesi-hit-sayaci-nedir-ve-neden-redis-kullanmaliyiz\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/giris-web-sitesi-hit-sayaci-nedir-ve-neden-redis-kullanmaliyiz\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/giris-web-sitesi-hit-sayaci-nedir-ve-neden-redis-kullanmaliyiz\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Giri\u015f: Web Sitesi Hit Sayac\u0131 Nedir ve Neden Redis Kullanmal\u0131y\u0131z?"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/39789","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=39789"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/39789\/revisions"}],"predecessor-version":[{"id":39790,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/39789\/revisions\/39790"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=39789"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=39789"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=39789"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}