{"id":35324,"date":"2025-11-28T08:41:05","date_gmt":"2025-11-28T05:41:05","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=35324"},"modified":"2025-11-28T08:41:05","modified_gmt":"2025-11-28T05:41:05","slug":"ruby-on-rails-uygulamalarinda-memcached-kullanimi-ubuntu-12-04-lts-uzerinde-adim-adim-rehber","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/ruby-on-rails-uygulamalarinda-memcached-kullanimi-ubuntu-12-04-lts-uzerinde-adim-adim-rehber\/","title":{"rendered":"Ruby on Rails Uygulamalar\u0131nda Memcached Kullan\u0131m\u0131: Ubuntu 12.04 LTS \u00dczerinde Ad\u0131m Ad\u0131m Rehber"},"content":{"rendered":"<p><body><\/p>\n<h2>Ruby on Rails Uygulamalar\u0131nda Memcached Kullan\u0131m\u0131: Ubuntu 12.04 LTS \u00dczerinde Ad\u0131m Ad\u0131m Rehber<\/h2>\n<p>Ruby on Rails, web uygulamalar\u0131 geli\u015ftirmek i\u00e7in pop\u00fcler ve g\u00fc\u00e7l\u00fc bir \u00e7er\u00e7evedir. Ancak, her web uygulamas\u0131 gibi, Rails uygulamalar\u0131 da belirli bir \u00f6l\u00e7e\u011fe ula\u015ft\u0131\u011f\u0131nda performans darbo\u011fazlar\u0131yla kar\u015f\u0131la\u015fabilir. Veritaban\u0131 sorgular\u0131, karma\u015f\u0131k hesaplamalar ve s\u0131k eri\u015filen veriler, uygulaman\u0131n yan\u0131t s\u00fcrelerini \u00f6nemli \u00f6l\u00e7\u00fcde yava\u015flatabilir. \u0130\u015fte bu noktada, Memcached gibi bir \u00f6nbellekleme sistemi devreye girer. Memcached, y\u00fcksek performansl\u0131, da\u011f\u0131t\u0131k bir bellek i\u00e7i anahtar-de\u011fer depolama sistemidir ve s\u0131k\u00e7a eri\u015filen verileri h\u0131zla sunarak uygulaman\u0131z\u0131n genel performans\u0131n\u0131 art\u0131r\u0131r.<\/p>\n<p>Bu kapsaml\u0131 teknik makalede, Ruby on Rails uygulamalar\u0131n\u0131zda Memcached&#8217;i Ubuntu 12.04 LTS i\u015fletim sistemi \u00fczerinde nas\u0131l kuraca\u011f\u0131n\u0131z\u0131, yap\u0131land\u0131raca\u011f\u0131n\u0131z\u0131 ve etkili bir \u015fekilde kullanaca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m a\u00e7\u0131klayaca\u011f\u0131z. Ubuntu 12.04 LTS, eski bir s\u00fcr\u00fcm olmas\u0131na ra\u011fmen, bu rehberin temel prensipleri ve ad\u0131mlar\u0131, daha yeni Ubuntu s\u00fcr\u00fcmleri ve genel olarak Linux tabanl\u0131 sistemler i\u00e7in de ge\u00e7erlidir. Amac\u0131m\u0131z, uygulaman\u0131z\u0131n performans\u0131n\u0131 art\u0131rmak i\u00e7in Memcached&#8217;in g\u00fcc\u00fcnden nas\u0131l yararlanabilece\u011finizi g\u00f6stermek ve \u00f6nbellekleme stratejileri hakk\u0131nda de\u011ferli bilgiler sunmakt\u0131r.<\/p>\n<h3>Memcached Nedir ve Neden Kullan\u0131l\u0131r?<\/h3>\n<p>Memcached, &#8220;Memory Cache Daemon&#8221; kelimelerinin k\u0131saltmas\u0131d\u0131r ve ad\u0131ndan da anla\u015f\u0131laca\u011f\u0131 gibi, verileri bilgisayar\u0131n RAM&#8217;inde depolayan, y\u00fcksek performansl\u0131, da\u011f\u0131t\u0131k bir bellek i\u00e7i anahtar-de\u011fer depolama sistemidir. Amac\u0131, veritaban\u0131ndan veya di\u011fer yava\u015f veri kaynaklar\u0131ndan veri \u00e7ekme ihtiyac\u0131n\u0131 azaltarak web uygulamalar\u0131n\u0131n h\u0131z\u0131n\u0131 art\u0131rmakt\u0131r. Memcached, basit bir anahtar-de\u011fer depolama mekanizmas\u0131 sunar; yani, her bir veri par\u00e7as\u0131 (de\u011fer), benzersiz bir anahtarla ili\u015fkilendirilir. Uygulama, bu anahtar\u0131 kullanarak veriyi \u00f6nbellekten okuyabilir veya yazabilir.<\/p>\n<h4>Memcached&#8217;in Temel \u00d6zellikleri<\/h4>\n<p>*   <strong>H\u0131z:<\/strong> Verileri do\u011frudan RAM&#8217;de tuttu\u011fu i\u00e7in disk I\/O&#8217;sundan ka\u00e7\u0131n\u0131r ve milisaniyeler i\u00e7inde yan\u0131t verir.<br \/>\n*   <strong>Da\u011f\u0131t\u0131k Mimari:<\/strong> Birden fazla sunucuya yay\u0131labilir, bu da \u00f6nbellek boyutunu art\u0131rma ve y\u00fck\u00fc da\u011f\u0131tma olana\u011f\u0131 sa\u011flar. Uygulaman\u0131z, \u00f6nbellek sunucular\u0131ndan olu\u015fan bir &#8220;havuz&#8221; ile ileti\u015fim kurar ve Memcached, verileri bu sunucular aras\u0131nda otomatik olarak da\u011f\u0131t\u0131r.<br \/>\n*   <strong>Basitlik:<\/strong> API&#8217;si olduk\u00e7a basittir (get, set, delete vb.).<br \/>\n*   <strong>Bellek \u0130\u00e7i Depolama:<\/strong> Veriler kal\u0131c\u0131 de\u011fildir. Memcached sunucusu yeniden ba\u015flat\u0131ld\u0131\u011f\u0131nda veya belle\u011fi doldu\u011funda eski veriler silinir (genellikle LRU &#8211; Least Recently Used algoritmas\u0131 ile). Bu nedenle, Memcached birincil veri depolama sistemi olarak de\u011fil, yaln\u0131zca bir \u00f6nbellek olarak kullan\u0131lmal\u0131d\u0131r.<br \/>\n*   <strong>Anahtar-De\u011fer Depolama:<\/strong> Her t\u00fcrl\u00fc serile\u015ftirilebilir veriyi (stringler, say\u0131lar, karma\u015f\u0131k objeler) depolayabilir.<\/p>\n<h4>Neden Ruby on Rails Uygulamalar\u0131nda Memcached Kullanmal\u0131y\u0131z?<\/h4>\n<p>Rails uygulamalar\u0131nda Memcached kullanman\u0131n ba\u015fl\u0131ca nedenleri \u015funlard\u0131r:<\/p>\n<p>*   <strong>Veritaban\u0131 Y\u00fck\u00fcn\u00fc Azaltma:<\/strong> S\u0131k\u00e7a okunan ancak nadiren de\u011fi\u015fen verileri (\u00f6rne\u011fin, \u00fcr\u00fcn listeleri, kullan\u0131c\u0131 profilleri, blog yaz\u0131lar\u0131) \u00f6nbelle\u011fe alarak veritaban\u0131 sunucusundaki y\u00fck\u00fc \u00f6nemli \u00f6l\u00e7\u00fcde azalt\u0131r\u0131z. Bu, veritaban\u0131n\u0131n daha kritik sorgulara odaklanmas\u0131na olanak tan\u0131r.<br \/>\n*   <strong>Yan\u0131t S\u00fcrelerini \u0130yile\u015ftirme:<\/strong> \u00d6nbellekten veri okumak, veritaban\u0131ndan okumaktan \u00e7ok daha h\u0131zl\u0131d\u0131r. Bu, kullan\u0131c\u0131lar\u0131n daha h\u0131zl\u0131 sayfa y\u00fcklemeleri ve daha ak\u0131c\u0131 bir deneyim ya\u015famas\u0131 anlam\u0131na gelir.<br \/>\n*   <strong>\u00d6l\u00e7eklenebilirlik:<\/strong> Uygulaman\u0131z\u0131n kullan\u0131c\u0131 say\u0131s\u0131 artt\u0131k\u00e7a, Memcached sunucular\u0131n\u0131 ekleyerek veya mevcut sunucular\u0131n kaynaklar\u0131n\u0131 art\u0131rarak \u00f6nbellekleme kapasitenizi kolayca \u00f6l\u00e7eklendirebilirsiniz.<br \/>\n*   <strong>Karma\u015f\u0131k Hesaplamalar\u0131 \u00d6nbellekleme:<\/strong> Bir sayfan\u0131n olu\u015fturulmas\u0131 veya bir raporun haz\u0131rlanmas\u0131 gibi zaman al\u0131c\u0131 ve kaynak yo\u011fun i\u015flemleri bir kez \u00e7al\u0131\u015ft\u0131r\u0131p sonucunu \u00f6nbelle\u011fe alabilirsiniz. Sonraki isteklerde, bu sonu\u00e7 do\u011frudan \u00f6nbellekten sunulur.<br \/>\n*   <strong>Session Y\u00f6netimi:<\/strong> Rails&#8217;in varsay\u0131lan session depolama mekanizmalar\u0131 (cookie veya veritaban\u0131) yerine Memcached&#8217;i session depolama olarak kullanarak, da\u011f\u0131t\u0131k sistemlerde session payla\u015f\u0131m\u0131n\u0131 kolayla\u015ft\u0131rabilir ve veritaban\u0131 y\u00fck\u00fcn\u00fc azaltabilirsiniz.<br \/>\n*   <strong>Fragment Caching:<\/strong> Rails&#8217;in sundu\u011fu fragment caching \u00f6zelli\u011fi sayesinde, bir sayfan\u0131n belirli b\u00f6l\u00fcmlerini \u00f6nbelle\u011fe alarak yaln\u0131zca de\u011fi\u015fen k\u0131s\u0131mlar\u0131n yeniden olu\u015fturulmas\u0131n\u0131 sa\u011flayabilirsiniz. Memcached, bu t\u00fcr \u00f6nbellekleme i\u00e7in ideal bir arka u\u00e7tur.<\/p>\n<p>Memcached&#8217;in volatile (kal\u0131c\u0131 olmayan) do\u011fas\u0131, onun birincil veri depolama \u00e7\u00f6z\u00fcm\u00fc olmad\u0131\u011f\u0131n\u0131, aksine performans\u0131 art\u0131rmak i\u00e7in kullan\u0131lan bir ara\u00e7 oldu\u011funu anlamak \u00f6nemlidir. Verileriniz Memcached&#8217;den silindi\u011finde veya sunucu \u00e7\u00f6kt\u00fc\u011f\u00fcnde, uygulaman\u0131z\u0131n bu durumu sorunsuz bir \u015fekilde ele alabilmesi ve verileri ana veri kayna\u011f\u0131ndan yeniden \u00e7ekebilmesi gerekir.<\/p>\n<h3>Ubuntu 12.04 LTS \u00dczerine Memcached Kurulumu<\/h3>\n<p>Memcached&#8217;i Ubuntu 12.04 LTS sunucunuza kurmak olduk\u00e7a basittir. A\u015fa\u011f\u0131daki ad\u0131mlar\u0131 izleyerek kurulumu ve temel yap\u0131land\u0131rmay\u0131 ger\u00e7ekle\u015ftirebilirsiniz.<\/p>\n<h4>Sistem G\u00fcncellemesi<\/h4>\n<p>Kuruluma ba\u015flamadan \u00f6nce, sisteminizin paket listesini g\u00fcncellemek iyi bir uygulamad\u0131r:<\/p>\n<pre><code class=\"language-bash\">sudo apt-get update<\/code><\/pre>\n<h4>Memcached Paketini Kurma<\/h4>\n<p>\u015eimdi Memcached sunucusunu kurabiliriz:<\/p>\n<pre><code class=\"language-bash\">sudo apt-get install memcached<\/code><\/pre>\n<p>Bu komut, Memcached servisini ve gerekli ba\u011f\u0131ml\u0131l\u0131klar\u0131 y\u00fckleyecektir. Kurulum tamamland\u0131\u011f\u0131nda, Memcached servisi otomatik olarak ba\u015flayacakt\u0131r.<\/p>\n<h4>Libmemcached-tools Kurulumu (\u0130ste\u011fe Ba\u011fl\u0131 ama \u00d6nerilir)<\/h4>\n<p><code>libmemcached-tools<\/code> paketi, Memcached sunucunuzu y\u00f6netmek ve izlemek i\u00e7in kullan\u0131\u015fl\u0131 komut sat\u0131r\u0131 ara\u00e7lar\u0131 (\u00f6rne\u011fin <code>memcstat<\/code>, <code>memccat<\/code>, <code>memcdump<\/code>) i\u00e7erir. Bu ara\u00e7lar, \u00f6nbellek istatistiklerini kontrol etmek veya belirli anahtarlar\u0131 g\u00f6r\u00fcnt\u00fclemek i\u00e7in faydal\u0131d\u0131r.<\/p>\n<pre><code class=\"language-bash\">sudo apt-get install libmemcached-tools<\/code><\/pre>\n<h4>Memcached Servisini Kontrol Etme<\/h4>\n<p>Kurulumdan sonra Memcached servisinin \u00e7al\u0131\u015f\u0131p \u00e7al\u0131\u015fmad\u0131\u011f\u0131n\u0131 kontrol edebilirsiniz:<\/p>\n<pre><code class=\"language-bash\">sudo service memcached status<\/code><\/pre>\n<p>E\u011fer servis \u00e7al\u0131\u015fm\u0131yorsa veya yeniden ba\u015flatman\u0131z gerekiyorsa a\u015fa\u011f\u0131daki komutlar\u0131 kullanabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">sudo service memcached start\nsudo service memcached stop\nsudo service memcached restart<\/code><\/pre>\n<h4>Memcached Yap\u0131land\u0131rmas\u0131<\/h4>\n<p>Memcached&#8217;in yap\u0131land\u0131rma dosyas\u0131 genellikle <code>\/etc\/memcached.conf<\/code> adresinde bulunur. Bu dosyay\u0131 d\u00fczenleyerek Memcached&#8217;in davran\u0131\u015f\u0131n\u0131 \u00f6zelle\u015ftirebilirsiniz.<\/p>\n<pre><code class=\"language-bash\">sudo nano \/etc\/memcached.conf<\/code><\/pre>\n<p>\u0130\u015fte bu dosyada bulabilece\u011finiz ve de\u011fi\u015ftirebilece\u011finiz baz\u0131 \u00f6nemli parametreler:<\/p>\n<p>*   <strong><code>-p <port><\/code> (Port):<\/strong> Memcached&#8217;in dinleyece\u011fi TCP portunu belirtir. Varsay\u0131lan olarak 11211&#8217;dir. Genellikle bu de\u011feri de\u011fi\u015ftirmeye gerek yoktur.<\/p>\n<pre><code class=\"language-\">-p 11211<\/code><\/pre>\n<p>*   <strong><code>-l <ip_address><\/code> (Dinleme Adresi):<\/strong> Memcached&#8217;in hangi IP adresinden gelen ba\u011flant\u0131lar\u0131 dinleyece\u011fini belirtir. Varsay\u0131lan olarak <code>127.0.0.1<\/code> (localhost) olarak ayarlanm\u0131\u015ft\u0131r, bu da yaln\u0131zca yerel makineden eri\u015filebilece\u011fi anlam\u0131na gelir. E\u011fer uygulaman\u0131z farkl\u0131 bir sunucuda \u00e7al\u0131\u015f\u0131yorsa veya birden fazla uygulama sunucunuz varsa, bu de\u011feri <code>0.0.0.0<\/code> (t\u00fcm aray\u00fczler) olarak de\u011fi\u015ftirmeli veya sunucunun \u00f6zel IP adresini belirtmelisiniz. Ancak, <code>0.0.0.0<\/code> kullan\u0131rken g\u00fcvenlik duvar\u0131n\u0131z\u0131 (iptables) yap\u0131land\u0131rarak yaln\u0131zca uygulaman\u0131z\u0131n \u00e7al\u0131\u015ft\u0131\u011f\u0131 sunucular\u0131n Memcached portuna eri\u015febildi\u011finden emin olmal\u0131s\u0131n\u0131z.<\/p>\n<pre><code class=\"language-\">-l 127.0.0.1\n    # E\u011fer ba\u015fka sunuculardan eri\u015fim gerekiyorsa:\n    # -l 0.0.0.0<\/code><\/pre>\n<p>*   <strong><code>-m <megabytes><\/code> (Maksimum Bellek):<\/strong> Memcached&#8217;in kullanabilece\u011fi maksimum RAM miktar\u0131n\u0131 megabayt cinsinden belirtir. Bu de\u011fer, sunucunuzun toplam RAM&#8217;ine ve di\u011fer uygulamalar\u0131n ihtiya\u00e7lar\u0131na g\u00f6re ayarlanmal\u0131d\u0131r. Genellikle sunucunun toplam RAM&#8217;inin %25-%50&#8217;si aras\u0131nda bir de\u011fer \u00f6nerilir. \u00d6rne\u011fin, 4GB RAM&#8217;i olan bir sunucuda 1GB (1024MB) ay\u0131rmak makul olabilir.<\/p>\n<pre><code class=\"language-\">-m 64\n    # \u00d6rne\u011fin 1GB i\u00e7in:\n    # -m 1024<\/code><\/pre>\n<p>*   <strong><code>-u <user><\/code> (Kullan\u0131c\u0131):<\/strong> Memcached daemon&#8217;unun hangi kullan\u0131c\u0131 hesab\u0131yla \u00e7al\u0131\u015faca\u011f\u0131n\u0131 belirtir. Varsay\u0131lan olarak <code>memcache<\/code> kullan\u0131c\u0131s\u0131d\u0131r ve bu genellikle g\u00fcvenli bir varsay\u0131land\u0131r.<\/p>\n<pre><code class=\"language-\">-u memcache<\/code><\/pre>\n<p>*   <strong><code>-c <connections><\/code> (Maksimum Ba\u011flant\u0131 Say\u0131s\u0131):<\/strong> Memcached&#8217;in kabul edece\u011fi maksimum e\u015fzamanl\u0131 ba\u011flant\u0131 say\u0131s\u0131n\u0131 belirtir. Varsay\u0131lan de\u011feri 1024&#8217;t\u00fcr ve \u00e7o\u011fu uygulama i\u00e7in yeterlidir.<\/p>\n<pre><code class=\"language-\">-c 1024<\/code><\/pre>\n<p>Yap\u0131land\u0131rma dosyas\u0131nda de\u011fi\u015fiklik yapt\u0131ktan sonra, Memcached servisini yeniden ba\u015flatman\u0131z gerekir ki de\u011fi\u015fiklikler etkili olsun:<\/p>\n<pre><code class=\"language-bash\">sudo service memcached restart<\/code><\/pre>\n<p>Bu ad\u0131mlarla, Ubuntu 12.04 LTS sunucunuzda Memcached ba\u015far\u0131yla kurulmu\u015f ve temel olarak yap\u0131land\u0131r\u0131lm\u0131\u015f olacakt\u0131r. Art\u0131k Ruby on Rails uygulaman\u0131zla entegrasyonuna ge\u00e7ebiliriz.<\/p>\n<h3>Ruby on Rails Uygulamas\u0131nda Memcached Entegrasyonu<\/h3>\n<p>Rails uygulamalar\u0131nda Memcached&#8217;i kullanmak i\u00e7in <code>dalli<\/code> gem&#8217;ini kullan\u0131r\u0131z. Dalli, Memcached ile Rails aras\u0131nda bir k\u00f6pr\u00fc g\u00f6revi g\u00f6ren pop\u00fcler ve g\u00fcvenilir bir istemcidir.<\/p>\n<h4>Rails Cache Store Olarak Memcached<\/h4>\n<p>Rails, \u00f6nbellekleme i\u00e7in esnek bir API sa\u011flar (<code>Rails.cache<\/code>). Bu API&#8217;nin arka plan\u0131nda hangi depolama mekanizmas\u0131n\u0131n kullan\u0131laca\u011f\u0131n\u0131 <code>cache_store<\/code> ayar\u0131 ile belirleriz.<\/p>\n<h5>Dalli Gem&#8217;ini Ekleme<\/h5>\n<p>Rails uygulaman\u0131z\u0131n <code>Gemfile<\/code>&#8216;\u0131na <code>dalli<\/code> gem&#8217;ini ekleyin:<\/p>\n<pre><code class=\"language-ruby\"># Gemfile\ngem 'dalli'<\/code><\/pre>\n<p>Ard\u0131ndan, gem&#8217;i y\u00fcklemek i\u00e7in <code>bundle install<\/code> komutunu \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code class=\"language-bash\">bundle install<\/code><\/pre>\n<h5>Rails Ortamlar\u0131nda Yap\u0131land\u0131rma<\/h5>\n<p>Genellikle Memcached&#8217;i \u00fcretim ortam\u0131nda (production) kullan\u0131r\u0131z. Bu nedenle, <code>config\/environments\/production.rb<\/code> dosyas\u0131n\u0131 d\u00fczenlemeniz gerekecektir. Geli\u015ftirme (development) ve test ortamlar\u0131nda farkl\u0131 bir \u00f6nbellek depolama mekanizmas\u0131 kullanmak yayg\u0131n bir uygulamad\u0131r.<\/p>\n<p><strong><code>config\/environments\/production.rb<\/code>:<\/strong><\/p>\n<pre><code class=\"language-ruby\"># config\/environments\/production.rb\n\n<h2>Cache store olarak Dalli'yi yap\u0131land\u0131r\u0131n<\/h2>\nconfig.cache_store = :dalli_store, 'localhost:11211', {\n  namespace: 'my_app_cache', # Uygulaman\u0131z i\u00e7in benzersiz bir isim alan\u0131\n  expires_in: 1.day,         # Varsay\u0131lan \u00f6nbellek \u00f6mr\u00fc\n  compress: true,            # Verileri s\u0131k\u0131\u015ft\u0131rarak a\u011f trafi\u011fini azaltma\n  pool_size: 5,              # Dalli ba\u011flant\u0131 havuzu boyutu\n  keepalive: true            # Ba\u011flant\u0131lar\u0131n a\u00e7\u0131k kalmas\u0131n\u0131 sa\u011flar\n}\n\n<h2>E\u011fer birden fazla Memcached sunucunuz varsa:<\/h2>\n<h2>config.cache_store = :dalli_store, ['10.0.0.1:11211', '10.0.0.2:11211'], { ... }<\/h2>\n\n<h2>Fragment caching'i etkinle\u015ftirin<\/h2>\nconfig.action_controller.perform_caching = true<\/code><\/pre>\n<p>Yukar\u0131daki yap\u0131land\u0131rmada kullan\u0131lan parametreler:<\/p>\n<p>*   <strong><code>'localhost:11211'<\/code><\/strong>: Memcached sunucusunun adresi ve portu. E\u011fer Memcached farkl\u0131 bir sunucuda \u00e7al\u0131\u015f\u0131yorsa, buraya o sunucunun IP adresini veya hostname&#8217;ini yazmal\u0131s\u0131n\u0131z. Birden fazla Memcached sunucusu varsa, bunlar\u0131 bir dizi olarak belirtebilirsiniz (\u00f6rne\u011fin <code>['10.0.0.1:11211', '10.0.0.2:11211']<\/code>).<br \/>\n*   <strong><code>namespace: 'my_app_cache'<\/code><\/strong>: Bu, uygulaman\u0131z\u0131n \u00f6nbellek anahtarlar\u0131 i\u00e7in bir \u00f6n ek g\u00f6revi g\u00f6r\u00fcr. Ayn\u0131 Memcached sunucusunu birden fazla uygulama kullan\u0131yorsa, \u00e7ak\u0131\u015fmalar\u0131 \u00f6nlemek i\u00e7in her uygulaman\u0131n benzersiz bir isim alan\u0131 olmas\u0131 \u00f6nemlidir.<br \/>\n*   <strong><code>expires_in: 1.day<\/code><\/strong>: \u00d6nbelle\u011fe al\u0131nan veriler i\u00e7in varsay\u0131lan \u00f6m\u00fcr s\u00fcresi. Bu s\u00fcre dolduktan sonra veri otomatik olarak \u00f6nbellekten silinir.<br \/>\n*   <strong><code>compress: true<\/code><\/strong>: Memcached&#8217;e g\u00f6nderilen verilerin s\u0131k\u0131\u015ft\u0131r\u0131lmas\u0131n\u0131 sa\u011flar. Bu, a\u011f trafi\u011fini azalt\u0131r ancak CPU kullan\u0131m\u0131n\u0131 bir miktar art\u0131rabilir. Genellikle <code>true<\/code> olarak ayarlanmas\u0131 \u00f6nerilir.<br \/>\n*   <strong><code>pool_size: 5<\/code><\/strong>: Dalli&#8217;nin Memcached sunucusuna a\u00e7aca\u011f\u0131 ba\u011flant\u0131 havuzunun boyutunu belirtir. \u00c7oklu i\u015f par\u00e7ac\u0131kl\u0131 (multi-threaded) Rails uygulamalar\u0131 i\u00e7in \u00f6nemlidir. Uygulaman\u0131z\u0131n e\u015fzamanl\u0131 istek say\u0131s\u0131na g\u00f6re ayarlanmal\u0131d\u0131r.<br \/>\n*   <strong><code>keepalive: true<\/code><\/strong>: Ba\u011flant\u0131lar\u0131n a\u00e7\u0131k kalmas\u0131n\u0131 ve yeniden kullan\u0131lmas\u0131n\u0131 sa\u011flar, bu da ba\u011flant\u0131 kurma maliyetini azalt\u0131r.<\/p>\n<p><strong><code>config\/environments\/development.rb<\/code>:<\/strong><br \/>\nGeli\u015ftirme ortam\u0131nda genellikle dosya tabanl\u0131 veya bellek i\u00e7i \u00f6nbellekleme kullan\u0131l\u0131r, b\u00f6ylece her de\u011fi\u015fiklikte \u00f6nbelle\u011fin temizlenmesi gerekmez veya Memcached sunucusu kurma zorunlulu\u011fu olmaz.<\/p>\n<pre><code class=\"language-ruby\"># config\/environments\/development.rb\n\n<h2>Dosya tabanl\u0131 \u00f6nbellekleme (\u00f6nerilir)<\/h2>\nconfig.cache_store = :file_store, Rails.root.join('tmp\/cache')\n\n<h2>Veya bellek i\u00e7i \u00f6nbellekleme (uygulama yeniden ba\u015flat\u0131ld\u0131\u011f\u0131nda temizlenir)<\/h2>\n<h2>config.cache_store = :memory_store<\/h2>\n\n<h2>Fragment caching'i geli\u015ftirme ortam\u0131nda kapatmak isteyebilirsiniz<\/h2>\nconfig.action_controller.perform_caching = false<\/code><\/pre>\n<p><strong><code>config\/environments\/test.rb<\/code>:<\/strong><br \/>\nTest ortam\u0131nda genellikle \u00f6nbellekleme devre d\u0131\u015f\u0131 b\u0131rak\u0131l\u0131r veya \u00e7ok basit bir bellek i\u00e7i depolama kullan\u0131l\u0131r.<\/p>\n<pre><code class=\"language-ruby\"># config\/environments\/test.rb\n\n<h2>\u00d6nbellek i\u015flemlerini devre d\u0131\u015f\u0131 b\u0131rak\u0131n<\/h2>\nconfig.cache_store = :null_store\n\n<h2>Veya bellek i\u00e7i \u00f6nbellekleme<\/h2>\n<h2>config.cache_store = :memory_store<\/h2>\n\nconfig.action_controller.perform_caching = false<\/code><\/pre>\n<p>Bu yap\u0131land\u0131rmalar\u0131 yapt\u0131ktan sonra, Rails uygulaman\u0131z\u0131 yeniden ba\u015flatman\u0131z gerekecektir.<\/p>\n<h4>Memcached&#8217;i Rails Uygulaman\u0131zda Kullanmak<\/h4>\n<p>Rails, \u00f6nbellekleme i\u00e7in \u00e7e\u015fitli katmanlar sunar. Bunlar\u0131 Memcached ile nas\u0131l kullanaca\u011f\u0131m\u0131za bakal\u0131m.<\/p>\n<h5>Basit \u00d6nbellekleme \u0130\u015flemleri (<code>Rails.cache<\/code>)<\/h5>\n<p><code>Rails.cache<\/code> nesnesi, uygulaman\u0131z\u0131n herhangi bir yerinden d\u00fc\u015f\u00fck seviyeli \u00f6nbellekleme i\u015flemleri yapman\u0131z\u0131 sa\u011flar.<\/p>\n<p>*   <strong>Veri Yazma (<code>write<\/code>):<\/strong><\/p>\n<pre><code class=\"language-ruby\">Rails.cache.write('my_key', 'my_value', expires_in: 1.hour)<\/code><\/pre>\n<p>    Burada <code>'my_key'<\/code> \u00f6nbellek anahtar\u0131, <code>'my_value'<\/code> ise \u00f6nbelle\u011fe al\u0131nacak de\u011ferdir. <code>expires_in<\/code> ile \u00f6zel bir \u00f6m\u00fcr s\u00fcresi belirleyebilirsiniz.<\/p>\n<p>*   <strong>Veri Okuma (<code>read<\/code>):<\/strong><\/p>\n<pre><code class=\"language-ruby\">value = Rails.cache.read('my_key')\n    # E\u011fer 'my_key' \u00f6nbellekte yoksa veya s\u00fcresi dolmu\u015fsa 'nil' d\u00f6ner.<\/code><\/pre>\n<p>*   <strong>Veri Okuma veya Yazma (<code>fetch<\/code>):<\/strong><br \/>\n    <code>fetch<\/code> metodu, \u00f6nbellekleme i\u00e7in en yayg\u0131n ve \u00f6nerilen y\u00f6ntemdir. \u00d6nbellekte anahtar varsa de\u011feri okur, yoksa verilen blo\u011fu \u00e7al\u0131\u015ft\u0131r\u0131r, sonucunu \u00f6nbelle\u011fe yazar ve de\u011feri d\u00f6nd\u00fcr\u00fcr.<\/p>\n<pre><code class=\"language-ruby\"># Kullan\u0131c\u0131 123'\u00fcn profil verilerini \u00f6nbelle\u011fe alal\u0131m\n    user_profile = Rails.cache.fetch(\"user_123_profile\", expires_in: 1.day) do\n      User.find(123).profile_data_from_expensive_api # Bu pahal\u0131 bir i\u015flem olsun\n    end\n\n    # E\u011fer \"user_123_profile\" \u00f6nbellekte varsa, API \u00e7a\u011fr\u0131s\u0131 yap\u0131lmaz.\n    # Yoksa, API \u00e7a\u011fr\u0131s\u0131 yap\u0131l\u0131r, sonu\u00e7 \u00f6nbelle\u011fe yaz\u0131l\u0131r ve d\u00f6nd\u00fcr\u00fcl\u00fcr.<\/code><\/pre>\n<p>*   <strong>Veri Silme (<code>delete<\/code>):<\/strong><\/p>\n<pre><code class=\"language-ruby\">Rails.cache.delete('my_key')<\/code><\/pre>\n<p>    Bir veri de\u011fi\u015fti\u011finde veya ge\u00e7ersiz oldu\u011funda \u00f6nbellekten silmek i\u00e7in kullan\u0131l\u0131r.<\/p>\n<p>*   <strong>Anahtar\u0131n Var Olup Olmad\u0131\u011f\u0131n\u0131 Kontrol Etme (<code>exist?<\/code>):<\/strong><\/p>\n<pre><code class=\"language-ruby\">Rails.cache.exist?('my_key') # => true veya false<\/code><\/pre>\n<p>*   <strong>Say\u0131sal De\u011ferleri Art\u0131rma\/Azaltma (<code>increment<\/code>\/<code>decrement<\/code>):<\/strong><br \/>\n    Memcached, atomik art\u0131rma\/azaltma i\u015flemleri i\u00e7in destek sunar. Bu, \u00f6zellikle saya\u00e7lar i\u00e7in kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<pre><code class=\"language-ruby\">Rails.cache.write('view_count', 0)\n    Rails.cache.increment('view_count') # => 1\n    Rails.cache.increment('view_count', 5) # => 6\n    Rails.cache.decrement('view_count') # => 5<\/code><\/pre>\n<p>*   <strong>T\u00fcm \u00d6nbelle\u011fi Temizleme (<code>clear<\/code>):<\/strong><\/p>\n<pre><code class=\"language-ruby\">Rails.cache.clear<\/code><\/pre>\n<p>    <strong>Dikkat:<\/strong> Bu komut, uygulaman\u0131z\u0131n kulland\u0131\u011f\u0131 t\u00fcm \u00f6nbelle\u011fi temizler. \u00dcretim ortam\u0131nda dikkatli kullan\u0131lmal\u0131d\u0131r, \u00e7\u00fcnk\u00fc bu, t\u00fcm kullan\u0131c\u0131lar i\u00e7in \u00f6nbellek isabet oran\u0131n\u0131 s\u0131f\u0131rlar ve uygulaman\u0131z\u0131n bir s\u00fcre yava\u015flamas\u0131na neden olabilir.<\/p>\n<h5>Fragment Caching (Par\u00e7a \u00d6nbellekleme)<\/h5>\n<p>Fragment caching, Rails view&#8217;lar\u0131n\u0131n (g\u00f6r\u00fcn\u00fcmlerinin) belirli b\u00f6l\u00fcmlerini \u00f6nbelle\u011fe alman\u0131z\u0131 sa\u011flar. Bu, \u00f6zellikle bir sayfan\u0131n sadece k\u00fc\u00e7\u00fck bir k\u0131sm\u0131n\u0131n s\u0131k s\u0131k de\u011fi\u015fti\u011fi durumlarda \u00e7ok etkilidir.<\/p>\n<pre><code class=\"language-erb\"><%# app\/views\/products\/show.html.erb %>\n\n\n\n<% cache @product do %>\n  <div class=\"product-details\">\n    <p><%= @product.description %><\/p>\n    <p>Fiyat: <%= number_to_currency(@product.price) %><\/p>\n    <%# Bu k\u0131s\u0131m sadece @product de\u011fi\u015fti\u011finde yeniden olu\u015fturulur %>\n  <\/div>\n<% end %>\n\n<div class=\"comments\">\n  <%# Yorumlar s\u0131k de\u011fi\u015febilir, bu y\u00fczden \u00f6nbelle\u011fe al\u0131nmaz %>\n  <%= render @product.comments %>\n<\/div><\/code><\/pre>\n<p>*   <strong><code><% cache @product do %> ... <% end %><\/code><\/strong>: Rails, <code>@product<\/code> nesnesinin <code>cache_key<\/code> metodunu kullanarak benzersiz bir \u00f6nbellek anahtar\u0131 olu\u015fturur. Bu anahtar genellikle model ad\u0131n\u0131, ID&#8217;sini ve <code>updated_at<\/code> zaman damgas\u0131n\u0131 i\u00e7erir (\u00f6rne\u011fin <code>products\/123-20230101120000<\/code>). <code>@product<\/code> nesnesi g\u00fcncellendi\u011finde (yani <code>updated_at<\/code> de\u011fi\u015fti\u011finde), \u00f6nbellek anahtar\u0131 da de\u011fi\u015fir ve Rails yeni i\u00e7eri\u011fi \u00f6nbelle\u011fe al\u0131r.<br \/>\n*   <strong>Koleksiyonlar i\u00e7in Caching:<\/strong> Bir koleksiyonu \u00f6nbelle\u011fe almak i\u00e7in de benzer bir y\u00f6ntem kullanabilirsiniz:<\/p>\n<pre><code class=\"language-erb\"><% cache ['products', @products] do %>\n      <% @products.each do |product| %>\n        <%= render product %>\n      <% end %>\n    <% end %><\/code><\/pre>\n<p>    Burada <code>['products', @products]<\/code> bir dizi anahtar olu\u015fturur. Rails, bu koleksiyonun her bir \u00fcyesinin <code>cache_key<\/code>&#8216;ini kullanarak koleksiyon i\u00e7in dinamik bir anahtar olu\u015fturur. Bu, koleksiyondaki herhangi bir \u00fcr\u00fcn de\u011fi\u015fti\u011finde veya yeni bir \u00fcr\u00fcn eklendi\u011finde \u00f6nbelle\u011fin otomatik olarak ge\u00e7ersiz k\u0131l\u0131nmas\u0131n\u0131 sa\u011flar.<\/p>\n<h5>Low-Level Caching (D\u00fc\u015f\u00fck Seviyeli \u00d6nbellekleme)<\/h5>\n<p>D\u00fc\u015f\u00fck seviyeli \u00f6nbellekleme, genellikle model katman\u0131nda veya servis objelerinde, veritaban\u0131 sorgular\u0131 veya karma\u015f\u0131k hesaplamalar gibi pahal\u0131 operasyonlar\u0131n sonu\u00e7lar\u0131n\u0131 \u00f6nbelle\u011fe almak i\u00e7in kullan\u0131l\u0131r.<\/p>\n<pre><code class=\"language-ruby\"># app\/models\/user.rb\nclass User < ActiveRecord::Base\n  def self.most_active_users_last_month\n    Rails.cache.fetch(\"most_active_users\", expires_in: 1.hour) do\n      # Bu sorgunun \u00e7al\u0131\u015fmas\u0131 uzun s\u00fcrebilir\n      User.joins(:posts).where('posts.created_at > ?', 1.month.ago)\n          .group('users.id')\n          .order('COUNT(posts.id) DESC')\n          .limit(10)\n    end\n  end\nend\n\n<h2>Kullan\u0131m:<\/h2>\n<h2>User.most_active_users_last_month # \u0130lk \u00e7a\u011fr\u0131da veritaban\u0131 sorgusu yapar, sonra \u00f6nbellekten d\u00f6ner.<\/code><\/pre>\n<\/h2>\n<h5>Session Store Olarak Memcached<\/h5>\n<p>Rails, kullan\u0131c\u0131 oturumlar\u0131n\u0131 (sessions) depolamak i\u00e7in \u00e7e\u015fitli se\u00e7enekler sunar. Memcached, da\u011f\u0131t\u0131k sistemlerde session&#8217;lar\u0131 y\u00f6netmek i\u00e7in pop\u00fcler bir se\u00e7enektir.<\/p>\n<p><code>config\/initializers\/session_store.rb<\/code> dosyas\u0131n\u0131 d\u00fczenleyin:<\/p>\n<pre><code class=\"language-ruby\"># config\/initializers\/session_store.rb\n\nRails.application.config.session_store :dalli_store, {\n  key: '_my_app_session',\n  namespace: 'sessions',\n  expire_after: 2.weeks, # Session'lar\u0131n ne kadar s\u00fcre sonra sona erece\u011fi\n  compress: true\n}<\/code><\/pre>\n<p>*   <strong><code>key: '_my_app_session'<\/code><\/strong>: Taray\u0131c\u0131da saklanacak session cookie&#8217;sinin ad\u0131d\u0131r.<br \/>\n*   <strong><code>namespace: 'sessions'<\/code><\/strong>: Memcached&#8217;deki di\u011fer \u00f6nbellek verileriyle \u00e7ak\u0131\u015fmay\u0131 \u00f6nlemek i\u00e7in session&#8217;lar i\u00e7in ayr\u0131 bir isim alan\u0131.<br \/>\n*   <strong><code>expire_after: 2.weeks<\/code><\/strong>: Session&#8217;lar\u0131n Memcached&#8217;de ne kadar s\u00fcreyle tutulaca\u011f\u0131n\u0131 belirtir.<\/p>\n<p>Memcached&#8217;i session store olarak kullanman\u0131n avantaj\u0131, uygulama sunucular\u0131 aras\u0131nda session verilerini kolayca payla\u015fabilmenizdir. Ancak, Memcached&#8217;in volatile yap\u0131s\u0131 nedeniyle, Memcached sunucusu \u00e7\u00f6kerse veya yeniden ba\u015flat\u0131l\u0131rsa t\u00fcm aktif session&#8217;lar kaybolacakt\u0131r. Bu durum uygulaman\u0131z i\u00e7in kabul edilebilir bir risk mi, yoksa session&#8217;lar\u0131n kal\u0131c\u0131l\u0131\u011f\u0131 daha m\u0131 \u00f6nemli, bunu de\u011ferlendirmeniz gerekir.<\/p>\n<h3>\u00d6nbellek Ge\u00e7ersiz K\u0131lma (Cache Invalidation) Stratejileri<\/h3>\n<p>\u00d6nbellekleme, performans\u0131 art\u0131r\u0131rken, &#8220;stale data&#8221; (eskimi\u015f veri) sorununu da beraberinde getirebilir. Bir veri \u00f6nbelle\u011fe al\u0131nd\u0131ktan sonra ana veri kayna\u011f\u0131nda de\u011fi\u015firse, \u00f6nbellekteki veri art\u0131k g\u00fcncel de\u011fildir. Bu durumu y\u00f6netmek i\u00e7in \u00f6nbellek ge\u00e7ersiz k\u0131lma stratejilerine ihtiyac\u0131m\u0131z vard\u0131r.<\/p>\n<h4>S\u00fcre Bazl\u0131 Ge\u00e7ersiz K\u0131lma (Time-based Invalidation)<\/h4>\n<p>En basit y\u00f6ntemdir. \u00d6nbelle\u011fe al\u0131nan her veriye bir \u00f6m\u00fcr s\u00fcresi (<code>expires_in<\/code>) atan\u0131r. Bu s\u00fcre doldu\u011funda, veri otomatik olarak \u00f6nbellekten silinir ve bir sonraki istekte ana veri kayna\u011f\u0131ndan yeniden \u00e7ekilir.<\/p>\n<pre><code class=\"language-ruby\">Rails.cache.fetch(\"some_data\", expires_in: 1.hour) do\n  # Veriyi \u00e7ekme kodu\nend<\/code><\/pre>\n<p>Bu y\u00f6ntem, verinin ne zaman g\u00fcncellenece\u011finin kritik olmad\u0131\u011f\u0131 veya verinin belirli aral\u0131klarla g\u00fcncellenmesinin kabul edilebilir oldu\u011fu durumlar i\u00e7in uygundur.<\/p>\n<h4>Ba\u011f\u0131ml\u0131l\u0131k Bazl\u0131 Ge\u00e7ersiz K\u0131lma (Dependency-based Invalidation)<\/h4>\n<p>Bir veri de\u011fi\u015fti\u011finde, onunla ili\u015fkili \u00f6nbellek girdilerini manuel olarak veya otomatik olarak silmek veya g\u00fcncellemek anlam\u0131na gelir.<\/p>\n<p>*   <strong>Manuel <code>delete<\/code>:<\/strong> Bir model kaydedildi\u011finde veya g\u00fcncellendi\u011finde, ili\u015fkili \u00f6nbellek anahtar\u0131n\u0131 manuel olarak silebilirsiniz.<\/p>\n<pre><code class=\"language-ruby\">class Product < ActiveRecord::Base\n      after_save :expire_product_cache\n\n      private\n      def expire_product_cache\n        Rails.cache.delete(\"product_#{id}_details\")\n        Rails.cache.delete(\"all_products_list\") # Liste de g\u00fcncellenmeli\n      end\n    end<\/code><\/pre>\n<p>*   <strong><code>cache_key<\/code> ve <code>updated_at<\/code>:<\/strong> Rails'in fragment caching'i ve <code>fetch<\/code> metodu genellikle ActiveRecord nesnelerinin <code>updated_at<\/code> zaman damgas\u0131n\u0131 veya \u00f6zel <code>cache_key<\/code> metodunu kullanarak otomatik olarak anahtar olu\u015fturur. Bir kay\u0131t g\u00fcncellendi\u011finde <code>updated_at<\/code> de\u011fi\u015fti\u011fi i\u00e7in, \u00f6nbellek anahtar\u0131 da de\u011fi\u015fir ve eski \u00f6nbellek girdisi ge\u00e7ersiz hale gelir.<br \/>\n*   <strong><code>touch: true<\/code> ile \u0130li\u015fkili Objeleri G\u00fcncelleme:<\/strong> \u0130li\u015fkili bir obje g\u00fcncellendi\u011finde, ana objenin <code>updated_at<\/code> zaman damgas\u0131n\u0131 da g\u00fcncellemek i\u00e7in kullan\u0131labilir. Bu, ana objenin \u00f6nbellek anahtar\u0131n\u0131n da de\u011fi\u015fmesini sa\u011flar.<\/p>\n<pre><code class=\"language-ruby\">class Comment < ActiveRecord::Base\n      belongs_to :post, touch: true # Bir yorum g\u00fcncellendi\u011finde veya olu\u015fturuldu\u011funda post'un updated_at'\u0131n\u0131 g\u00fcnceller\n    end<\/code><\/pre>\n<h4>Version Numaralar\u0131 veya Timestamp'lar<\/h4>\n<p>\u00d6nbellek anahtarlar\u0131n\u0131za bir versiyon numaras\u0131 veya g\u00fcncel bir zaman damgas\u0131 ekleyerek, veriler de\u011fi\u015fti\u011finde anahtar\u0131 kolayca de\u011fi\u015ftirebilirsiniz.<\/p>\n<pre><code class=\"language-ruby\">def current_data_version\n  Rails.cache.fetch(\"data_version\") { Time.now.to_i }\nend\n\n<h2>Bir veri g\u00fcncellendi\u011finde:<\/h2>\n<h2>Rails.cache.write(\"data_version\", Time.now.to_i)<\/h2>\n\n<h2>\u00d6nbellek anahtar\u0131:<\/h2>\nRails.cache.fetch(\"my_data_#{current_data_version}\") do\n  # ... veri \u00e7ekme ...\nend<\/code><\/pre>\n<p>Bu, \"cache busting\" olarak da bilinir ve t\u00fcm ilgili \u00f6nbellek girdilerini tek bir versiyon numaras\u0131n\u0131 de\u011fi\u015ftirerek ge\u00e7ersiz k\u0131lman\u0131za olanak tan\u0131r.<\/p>\n<h4>Nils Doldurma (Filling with Nils)<\/h4>\n<p>Bir kay\u0131t silindi\u011finde, \u00f6nbellekteki anahtar\u0131n\u0131 tamamen silmek yerine, de\u011ferini <code>nil<\/code> olarak ayarlayabilirsiniz. Daha sonra bu anahtar okundu\u011funda <code>nil<\/code> de\u011feri al\u0131n\u0131rsa, bu, verinin art\u0131k mevcut olmad\u0131\u011f\u0131n\u0131 veya g\u00fcncel olmad\u0131\u011f\u0131n\u0131 g\u00f6sterir. Uygulama bu durumda veritaban\u0131ndan \u00e7ekmeye \u00e7al\u0131\u015f\u0131r ve e\u011fer bulamazsa, \u00f6nbellekteki <code>nil<\/code> de\u011ferini tutmaya devam edebilir veya anahtar\u0131 tamamen silebilir. Bu, \"thundering herd\" problemini hafifletmeye yard\u0131mc\u0131 olabilir.<\/p>\n<h4>Sweepers (Temizleyiciler)<\/h4>\n<p>Rails 3 ve \u00f6ncesinde <code>ActiveModel::Sweeper<\/code>'lar, model de\u011fi\u015fikliklerini izlemek ve ilgili \u00f6nbellekleri temizlemek i\u00e7in kullan\u0131l\u0131rd\u0131. Rails 4 ve sonras\u0131nda, <code>ActiveRecord<\/code> callback'leri veya daha modern observer desenleri (\u00f6rne\u011fin <code>ActiveSupport::Notifications<\/code> veya \u00f6zel servis objeleri) genellikle tercih edilir.<\/p>\n<p>\u00d6nbellek ge\u00e7ersiz k\u0131lma stratejileri, uygulaman\u0131z\u0131n ihtiya\u00e7lar\u0131na ve verilerinizin de\u011fi\u015fim s\u0131kl\u0131\u011f\u0131na g\u00f6re dikkatlice se\u00e7ilmelidir. A\u015f\u0131r\u0131 \u00f6nbellekleme, eski verilere yol a\u00e7abilirken, yetersiz \u00f6nbellekleme performans kazan\u00e7lar\u0131n\u0131 s\u0131n\u0131rlar. \u0130yi bir denge bulmak \u00f6nemlidir.<\/p>\n<h3>Memcached Performans \u0130pu\u00e7lar\u0131 ve En \u0130yi Uygulamalar<\/h3>\n<p>Memcached'den en iyi \u015fekilde yararlanmak i\u00e7in baz\u0131 en iyi uygulamalar\u0131 ve performans ipu\u00e7lar\u0131n\u0131 g\u00f6z \u00f6n\u00fcnde bulundurmak \u00f6nemlidir.<\/p>\n<p>*   <strong>Sadece De\u011ferli Verileri \u00d6nbellekleme:<\/strong> Her \u015feyi \u00f6nbelle\u011fe almaya \u00e7al\u0131\u015fmay\u0131n. S\u0131k\u00e7a eri\u015filen, pahal\u0131ya mal olan (uzun s\u00fcren sorgular, API \u00e7a\u011fr\u0131lar\u0131, karma\u015f\u0131k hesaplamalar) ve nispeten sabit verileri \u00f6nbellekleyin. Nadiren eri\u015filen veya s\u00fcrekli de\u011fi\u015fen verileri \u00f6nbelleklemek, sadece \u00f6nbellek belle\u011fini bo\u015fa harcamakla kalmaz, ayn\u0131 zamanda ge\u00e7ersiz k\u0131lma karma\u015f\u0131kl\u0131\u011f\u0131n\u0131 da art\u0131r\u0131r.<br \/>\n*   <strong>\u00d6nbellek Anahtarlar\u0131n\u0131n Tasar\u0131m\u0131:<\/strong><br \/>\n    *   <strong>Anlaml\u0131 ve Benzersiz Olun:<\/strong> Anahtarlar, i\u00e7erdi\u011fi veriyi tan\u0131mlamal\u0131 ve \u00e7ak\u0131\u015fmalar\u0131 \u00f6nlemek i\u00e7in yeterince benzersiz olmal\u0131d\u0131r (\u00f6rne\u011fin <code>user_123_posts_page_2<\/code>).<br \/>\n    *   <strong>K\u0131sa Olun:<\/strong> Memcached anahtarlar\u0131 i\u00e7in maksimum boyut 250 karakterdir. Daha k\u0131sa anahtarlar, a\u011f trafi\u011fini ve Memcached sunucusundaki bellek kullan\u0131m\u0131n\u0131 azalt\u0131r.<br \/>\n    *   <strong>Versiyonlama Kullan\u0131n:<\/strong> Uygulama kodu veya veri yap\u0131s\u0131 de\u011fi\u015fti\u011finde, \u00f6nbellek anahtarlar\u0131na bir versiyon numaras\u0131 eklemek, eski \u00f6nbellek verilerinin otomatik olarak ge\u00e7ersiz k\u0131l\u0131nmas\u0131n\u0131 sa\u011flar (\u00f6rne\u011fin <code>v2\/user_123_profile<\/code>).<br \/>\n*   <strong>Serialization Overhead:<\/strong> Ruby objelerini Memcached'e kaydetti\u011finizde, Dalli gem'i bu objeleri YAML veya Marshal format\u0131nda serile\u015ftirir. Bu serile\u015ftirme ve deserializasyon i\u015flemleri CPU ve bellek maliyetine neden olabilir. M\u00fcmk\u00fcnse, basit string'ler veya say\u0131lar gibi daha hafif veri tiplerini \u00f6nbelleklemeyi tercih edin.<br \/>\n*   <strong>Cache Hit Ratio \u0130zleme:<\/strong> Memcached'in ne kadar etkili \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 anlamak i\u00e7in \"cache hit ratio\" (\u00f6nbellek isabet oran\u0131) metriklerini d\u00fczenli olarak izleyin. Y\u00fcksek bir isabet oran\u0131 (%90 ve \u00fczeri), \u00f6nbellekleme stratejinizin iyi \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 g\u00f6sterir. D\u00fc\u015f\u00fck bir oran, ya \u00f6nbelle\u011fe alma ihtiyac\u0131n\u0131z olmayan verileri \u00f6nbellekledi\u011finizi ya da <code>expires_in<\/code> s\u00fcrelerinin \u00e7ok k\u0131sa oldu\u011funu g\u00f6sterebilir. <code>memcstat<\/code> arac\u0131 veya izleme \u00e7\u00f6z\u00fcmleri (\u00f6rne\u011fin Prometheus, Grafana) ile bu metrikleri izleyebilirsiniz.<br \/>\n*   <strong>Memcached Sunucusu Kaynaklar\u0131:<\/strong><br \/>\n    *   <strong>Yeterli Bellek:<\/strong> Memcached sunucunuza yeterli RAM atad\u0131\u011f\u0131n\u0131zdan emin olun (<code>-m<\/code> parametresi). Bellek doldu\u011funda, Memcached eski verileri silmeye ba\u015flar ve bu da isabet oran\u0131n\u0131 d\u00fc\u015f\u00fcr\u00fcr.<br \/>\n    *   <strong>Yeterli CPU:<\/strong> Serile\u015ftirme\/deserile\u015ftirme ve a\u011f i\u015flemleri i\u00e7in yeterli CPU kaynaklar\u0131na sahip olmak \u00f6nemlidir.<br \/>\n*   <strong>Network Latency:<\/strong> Uygulama sunucusu ile Memcached sunucusu aras\u0131ndaki a\u011f gecikmesini minimize edin. \u0130deal olarak, her iki sunucu da ayn\u0131 veri merkezinde veya ayn\u0131 LAN'da olmal\u0131d\u0131r. Y\u00fcksek gecikme, Memcached'in sa\u011flad\u0131\u011f\u0131 performans avantajlar\u0131n\u0131 azaltabilir.<br \/>\n*   <strong>Thundering Herd Problemi:<\/strong> Bir \u00f6nbellek anahtar\u0131 s\u00fcresi doldu\u011funda veya silindi\u011finde, ayn\u0131 anda y\u00fczlerce veya binlerce iste\u011fin ayn\u0131 anda ana veri kayna\u011f\u0131na (veritaban\u0131) gitmesi durumudur. Bu, veritaban\u0131n\u0131 a\u015f\u0131r\u0131 y\u00fckleyebilir. Bu durumu hafifletmek i\u00e7in:<br \/>\n    *   <strong>Kilit Mekanizmalar\u0131:<\/strong> <code>Rails.cache.fetch<\/code> i\u00e7inde da\u011f\u0131t\u0131lm\u0131\u015f kilitler kullanabilirsiniz, b\u00f6ylece yaln\u0131zca bir iste\u011fin veriyi yeniden olu\u015fturmas\u0131na izin verilirken di\u011ferleri kilit serbest b\u0131rak\u0131lana kadar bekler.<br \/>\n    *   <strong>Jitter Ekleme:<\/strong> <code>expires_in<\/code> de\u011ferlerine k\u00fc\u00e7\u00fck rastgele farklar ekleyerek t\u00fcm anahtarlar\u0131n ayn\u0131 anda sona ermesini engelleyebilirsiniz.<br \/>\n    *   <strong>Cache Warming:<\/strong> Uygulama ba\u015flat\u0131ld\u0131\u011f\u0131nda veya belirli aral\u0131klarla \u00f6nemli \u00f6nbellekleri proaktif olarak doldurabilirsiniz.<br \/>\n*   <strong>Memcached'in Volatile Yap\u0131s\u0131:<\/strong> Verilerin kal\u0131c\u0131 olmad\u0131\u011f\u0131n\u0131 her zaman hat\u0131rlay\u0131n. Memcached bir veri kayb\u0131 durumunda tolere edilebilir bir \u00f6nbellektir, birincil veri depolama sistemi de\u011fildir. Uygulaman\u0131z, \u00f6nbellekten veri alamad\u0131\u011f\u0131nda ana veri kayna\u011f\u0131ndan sorunsuz bir \u015fekilde veri \u00e7ekebilmelidir.<\/p>\n<h3>Sorun Giderme ve \u0130zleme<\/h3>\n<p>Memcached'i kullan\u0131rken kar\u015f\u0131la\u015fabilece\u011finiz baz\u0131 yayg\u0131n sorunlar ve bunlar\u0131 giderme yollar\u0131:<\/p>\n<p>*   <strong>Memcached Servisi \u00c7al\u0131\u015fm\u0131yor:<\/strong><br \/>\n    *   <code>sudo service memcached status<\/code> komutuyla kontrol edin.<br \/>\n    *   <code>sudo service memcached start<\/code> ile ba\u015flatmay\u0131 deneyin.<br \/>\n    *   Loglar\u0131 kontrol edin: <code>\/var\/log\/memcached.log<\/code> veya sistem loglar\u0131 (<code>\/var\/log\/syslog<\/code>).<br \/>\n*   <strong>Ba\u011flant\u0131 Sorunlar\u0131 (Rails taraf\u0131ndan):<\/strong><br \/>\n    *   Rails uygulaman\u0131z\u0131n loglar\u0131n\u0131 kontrol edin. <code>Dalli::RingError<\/code> veya <code>Dalli::NetworkError<\/code> gibi hatalar g\u00f6rebilirsiniz.<br \/>\n    *   <code>config\/environments\/production.rb<\/code> dosyas\u0131ndaki Memcached sunucu adresinin ve portunun do\u011fru oldu\u011fundan emin olun.<br \/>\n    *   Memcached sunucusunun g\u00fcvenlik duvar\u0131n\u0131 (firewall) kontrol edin. Uygulama sunucunuzun Memcached portuna (varsay\u0131lan 11211) eri\u015fimi oldu\u011fundan emin olun.<br \/>\n    *   <code>telnet<\/code> ile manuel test yap\u0131n: <code>telnet localhost 11211<\/code> (veya sunucu IP'si). Ba\u011flanabiliyorsan\u0131z, <code>set mykey 0 60 5\\r\\nhello\\r\\n<\/code> ve <code>get mykey\\r\\n<\/code> gibi komutlarla manuel olarak veri yaz\u0131p okuyabilirsiniz.<br \/>\n*   <strong>Bellek Dolulu\u011fu ve D\u00fc\u015f\u00fck Isabet Oran\u0131:<\/strong><br \/>\n    *   <code>echo stats | nc localhost 11211<\/code> komutunu kullanarak Memcached istatistiklerini kontrol edin. <code>curr_items<\/code> (mevcut \u00f6\u011fe say\u0131s\u0131), <code>limit_maxbytes<\/code> (tahsis edilen bellek), <code>bytes<\/code> (kullan\u0131lan bellek), <code>get_hits<\/code> (isabet say\u0131s\u0131) ve <code>get_misses<\/code> (ka\u00e7an say\u0131s\u0131) gibi metrikleri inceleyin.<br \/>\n    *   E\u011fer <code>bytes<\/code> de\u011feri <code>limit_maxbytes<\/code>'e yak\u0131nsa ve <code>evictions<\/code> (\u00e7\u0131kar\u0131lan \u00f6\u011fe say\u0131s\u0131) y\u00fcksekse, Memcached'in belle\u011fi doluyor demektir. Bu durumda, ya daha fazla bellek tahsis etmeli (<code>-m<\/code> parametresi) ya da \u00f6nbellekleme stratejinizi g\u00f6zden ge\u00e7irmelisiniz (daha az veri \u00f6nbellekleme, daha k\u0131sa <code>expires_in<\/code> s\u00fcreleri).<br \/>\n    *   <code>get_hits<\/code> \/ (<code>get_hits<\/code> + <code>get_misses<\/code>) oran\u0131 size isabet oran\u0131n\u0131 verir. D\u00fc\u015f\u00fck isabet oran\u0131, \u00f6nbelle\u011fin yeterince kullan\u0131lmad\u0131\u011f\u0131n\u0131 veya verilerin \u00e7ok h\u0131zl\u0131 ge\u00e7ersiz k\u0131l\u0131nd\u0131\u011f\u0131n\u0131 g\u00f6sterir.<br \/>\n*   <strong>Veri Tutars\u0131zl\u0131\u011f\u0131 (Stale Data):<\/strong><br \/>\n    *   \u00d6nbellek ge\u00e7ersiz k\u0131lma stratejilerinizi g\u00f6zden ge\u00e7irin. Veri g\u00fcncellendi\u011finde ilgili \u00f6nbellek anahtarlar\u0131n\u0131n do\u011fru bir \u015fekilde silindi\u011finden veya g\u00fcncellendi\u011finden emin olun.<br \/>\n    *   <code>expires_in<\/code> s\u00fcrelerinin uygun olup olmad\u0131\u011f\u0131n\u0131 kontrol edin.<\/p>\n<h3>Alternatifler ve Gelecek (K\u0131sa Bir Bak\u0131\u015f)<\/h3>\n<p>Memcached, basit ve h\u0131zl\u0131 \u00f6nbellekleme i\u00e7in harika bir se\u00e7enek olsa da, bazen daha geli\u015fmi\u015f \u00f6zelliklere ihtiya\u00e7 duyulabilir.<\/p>\n<p>*   <strong>Redis:<\/strong> Memcached'e pop\u00fcler bir alternatiftir. Redis, Memcached'den farkl\u0131 olarak daha zengin veri yap\u0131lar\u0131 (listeler, setler, hash'ler vb.) sunar ve iste\u011fe ba\u011fl\u0131 olarak verileri diske yazarak kal\u0131c\u0131l\u0131k sa\u011flayabilir. Ayr\u0131ca, yay\u0131nlama\/abone olma (pub\/sub) gibi \u00f6zellikleriyle de daha geni\u015f kullan\u0131m alanlar\u0131na sahiptir.<br \/>\n*   <strong>Varnish Cache:<\/strong> HTTP seviyesinde \u00f6nbellekleme yapan bir ters proxy sunucusudur. Genellikle tam sayfa \u00f6nbellekleme i\u00e7in kullan\u0131l\u0131r ve web sunucunuzun \u00f6n\u00fcnde durarak statik veya dinamik olarak \u00f6nbelle\u011fe al\u0131nm\u0131\u015f HTTP yan\u0131tlar\u0131n\u0131 do\u011frudan istemcilere sunar.<br \/>\n*   <strong>CDNs (\u0130\u00e7erik Da\u011f\u0131t\u0131m A\u011flar\u0131):<\/strong> \u00d6zellikle statik varl\u0131klar (resimler, CSS, JavaScript dosyalar\u0131) i\u00e7in kullan\u0131l\u0131r. Kullan\u0131c\u0131lara co\u011frafi olarak daha yak\u0131n sunuculardan i\u00e7erik sunarak y\u00fckleme s\u00fcrelerini azalt\u0131r.<\/p>\n<p>Rails ekosistemi ve \u00f6nbellekleme \u00e7\u00f6z\u00fcmleri s\u00fcrekli geli\u015fmektedir. Daha yeni Rails s\u00fcr\u00fcmleri (Rails 5, 6, 7), \u00f6nbellekleme konusunda \u00e7e\u015fitli iyile\u015ftirmeler ve yeni \u00f6zellikler sunmu\u015ftur. Ancak, bu makalede belirtilen temel prensipler ve Memcached ile entegrasyon y\u00f6ntemleri, Rails'in t\u00fcm s\u00fcr\u00fcmleri i\u00e7in ge\u00e7erlili\u011fini korumaktad\u0131r.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Ruby on Rails uygulamalar\u0131nda Memcached kullanmak, uygulaman\u0131z\u0131n performans\u0131n\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rmak ve veritaban\u0131 y\u00fck\u00fcn\u00fc azaltmak i\u00e7in g\u00fc\u00e7l\u00fc ve etkili bir y\u00f6ntemdir. Bu makalede, Memcached'i Ubuntu 12.04 LTS \u00fczerinde nas\u0131l kuraca\u011f\u0131n\u0131z\u0131, Rails uygulaman\u0131zla nas\u0131l entegre edece\u011finizi ve farkl\u0131 \u00f6nbellekleme stratejilerini nas\u0131l uygulayaca\u011f\u0131n\u0131z\u0131 ayr\u0131nt\u0131l\u0131 olarak ele ald\u0131k.<\/p>\n<p>Do\u011fru \u00f6nbellekleme stratejileri se\u00e7imi, anahtar tasar\u0131m\u0131, isabet oranlar\u0131n\u0131n izlenmesi ve etkili ge\u00e7ersiz k\u0131lma y\u00f6ntemlerinin uygulanmas\u0131, Memcached'den maksimum fayda sa\u011flaman\u0131n anahtar\u0131d\u0131r. Unutmay\u0131n ki Memcached birincil veri depolama sistemi de\u011fil, bir \u00f6nbellektir ve verilerin kal\u0131c\u0131 olmad\u0131\u011f\u0131n\u0131 her zaman g\u00f6z \u00f6n\u00fcnde bulundurmal\u0131s\u0131n\u0131z.<\/p>\n<p>Uygulaman\u0131z b\u00fcy\u00fcd\u00fck\u00e7e ve kullan\u0131c\u0131 say\u0131s\u0131 artt\u0131k\u00e7a, \u00f6nbellekleme stratejilerinizi s\u00fcrekli olarak optimize etmek ve ayarlamak \u00f6nemlidir. Memcached, do\u011fru kullan\u0131ld\u0131\u011f\u0131nda, Rails uygulaman\u0131z\u0131n h\u0131z\u0131n\u0131 ve \u00f6l\u00e7eklenebilirli\u011fini bir sonraki seviyeye ta\u015f\u0131yacak vazge\u00e7ilmez bir ara\u00e7t\u0131r. Bu rehberdeki bilgileri kullanarak, uygulaman\u0131z i\u00e7in daha h\u0131zl\u0131 ve daha verimli bir kullan\u0131c\u0131 deneyimi sunabilirsiniz.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Ruby on Rails Uygulamalar\u0131nda Memcached Kullan\u0131m\u0131: Ubuntu 12.04 LTS \u00dczerinde Ad\u0131m Ad\u0131m Rehber\nRuby on Rails, web uygulamalar\u0131 geli\u015ftirmek i\u00e7","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":[1468],"tags":[],"class_list":{"0":"post-35324","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-ubuntu","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>Ruby on Rails Uygulamalar\u0131nda Memcached Kullan\u0131m\u0131: Ubuntu 12.04 LTS \u00dczerinde Ad\u0131m Ad\u0131m Rehber - 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\/ruby-on-rails-uygulamalarinda-memcached-kullanimi-ubuntu-12-04-lts-uzerinde-adim-adim-rehber\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ruby on Rails Uygulamalar\u0131nda Memcached Kullan\u0131m\u0131: Ubuntu 12.04 LTS \u00dczerinde Ad\u0131m Ad\u0131m Rehber\" \/>\n<meta property=\"og:description\" content=\"Ruby on Rails Uygulamalar\u0131nda Memcached Kullan\u0131m\u0131: Ubuntu 12.04 LTS \u00dczerinde Ad\u0131m Ad\u0131m Rehber Ruby on Rails, web uygulamalar\u0131 geli\u015ftirmek i\u00e7\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/ruby-on-rails-uygulamalarinda-memcached-kullanimi-ubuntu-12-04-lts-uzerinde-adim-adim-rehber\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-28T05:41:05+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=\"24 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ruby-on-rails-uygulamalarinda-memcached-kullanimi-ubuntu-12-04-lts-uzerinde-adim-adim-rehber\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ruby-on-rails-uygulamalarinda-memcached-kullanimi-ubuntu-12-04-lts-uzerinde-adim-adim-rehber\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Ruby on Rails Uygulamalar\u0131nda Memcached Kullan\u0131m\u0131: Ubuntu 12.04 LTS \u00dczerinde Ad\u0131m Ad\u0131m Rehber\",\"datePublished\":\"2025-11-28T05:41:05+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ruby-on-rails-uygulamalarinda-memcached-kullanimi-ubuntu-12-04-lts-uzerinde-adim-adim-rehber\/\"},\"wordCount\":3957,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Ubuntu\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/ruby-on-rails-uygulamalarinda-memcached-kullanimi-ubuntu-12-04-lts-uzerinde-adim-adim-rehber\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ruby-on-rails-uygulamalarinda-memcached-kullanimi-ubuntu-12-04-lts-uzerinde-adim-adim-rehber\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/ruby-on-rails-uygulamalarinda-memcached-kullanimi-ubuntu-12-04-lts-uzerinde-adim-adim-rehber\/\",\"name\":\"Ruby on Rails Uygulamalar\u0131nda Memcached Kullan\u0131m\u0131: Ubuntu 12.04 LTS \u00dczerinde Ad\u0131m Ad\u0131m Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-28T05:41:05+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ruby-on-rails-uygulamalarinda-memcached-kullanimi-ubuntu-12-04-lts-uzerinde-adim-adim-rehber\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/ruby-on-rails-uygulamalarinda-memcached-kullanimi-ubuntu-12-04-lts-uzerinde-adim-adim-rehber\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ruby-on-rails-uygulamalarinda-memcached-kullanimi-ubuntu-12-04-lts-uzerinde-adim-adim-rehber\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Ruby on Rails Uygulamalar\u0131nda Memcached Kullan\u0131m\u0131: Ubuntu 12.04 LTS \u00dczerinde Ad\u0131m Ad\u0131m Rehber\"}]},{\"@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":"Ruby on Rails Uygulamalar\u0131nda Memcached Kullan\u0131m\u0131: Ubuntu 12.04 LTS \u00dczerinde Ad\u0131m Ad\u0131m Rehber - 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\/ruby-on-rails-uygulamalarinda-memcached-kullanimi-ubuntu-12-04-lts-uzerinde-adim-adim-rehber\/","og_locale":"tr_TR","og_type":"article","og_title":"Ruby on Rails Uygulamalar\u0131nda Memcached Kullan\u0131m\u0131: Ubuntu 12.04 LTS \u00dczerinde Ad\u0131m Ad\u0131m Rehber","og_description":"Ruby on Rails Uygulamalar\u0131nda Memcached Kullan\u0131m\u0131: Ubuntu 12.04 LTS \u00dczerinde Ad\u0131m Ad\u0131m Rehber Ruby on Rails, web uygulamalar\u0131 geli\u015ftirmek i\u00e7","og_url":"https:\/\/fatihsoysal.com\/blog\/ruby-on-rails-uygulamalarinda-memcached-kullanimi-ubuntu-12-04-lts-uzerinde-adim-adim-rehber\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-28T05:41:05+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"24 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/ruby-on-rails-uygulamalarinda-memcached-kullanimi-ubuntu-12-04-lts-uzerinde-adim-adim-rehber\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/ruby-on-rails-uygulamalarinda-memcached-kullanimi-ubuntu-12-04-lts-uzerinde-adim-adim-rehber\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Ruby on Rails Uygulamalar\u0131nda Memcached Kullan\u0131m\u0131: Ubuntu 12.04 LTS \u00dczerinde Ad\u0131m Ad\u0131m Rehber","datePublished":"2025-11-28T05:41:05+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/ruby-on-rails-uygulamalarinda-memcached-kullanimi-ubuntu-12-04-lts-uzerinde-adim-adim-rehber\/"},"wordCount":3957,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Ubuntu"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/ruby-on-rails-uygulamalarinda-memcached-kullanimi-ubuntu-12-04-lts-uzerinde-adim-adim-rehber\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/ruby-on-rails-uygulamalarinda-memcached-kullanimi-ubuntu-12-04-lts-uzerinde-adim-adim-rehber\/","url":"https:\/\/fatihsoysal.com\/blog\/ruby-on-rails-uygulamalarinda-memcached-kullanimi-ubuntu-12-04-lts-uzerinde-adim-adim-rehber\/","name":"Ruby on Rails Uygulamalar\u0131nda Memcached Kullan\u0131m\u0131: Ubuntu 12.04 LTS \u00dczerinde Ad\u0131m Ad\u0131m Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-28T05:41:05+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/ruby-on-rails-uygulamalarinda-memcached-kullanimi-ubuntu-12-04-lts-uzerinde-adim-adim-rehber\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/ruby-on-rails-uygulamalarinda-memcached-kullanimi-ubuntu-12-04-lts-uzerinde-adim-adim-rehber\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/ruby-on-rails-uygulamalarinda-memcached-kullanimi-ubuntu-12-04-lts-uzerinde-adim-adim-rehber\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Ruby on Rails Uygulamalar\u0131nda Memcached Kullan\u0131m\u0131: Ubuntu 12.04 LTS \u00dczerinde Ad\u0131m Ad\u0131m Rehber"}]},{"@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\/35324","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=35324"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35324\/revisions"}],"predecessor-version":[{"id":35325,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35324\/revisions\/35325"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=35324"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=35324"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=35324"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}