{"id":35253,"date":"2025-11-27T12:40:51","date_gmt":"2025-11-27T09:40:51","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=35253"},"modified":"2025-11-27T12:40:51","modified_gmt":"2025-11-27T09:40:51","slug":"rediste-hash-yapilari-nasil-yonetilir-kapsamli-bir-rehber","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/rediste-hash-yapilari-nasil-yonetilir-kapsamli-bir-rehber\/","title":{"rendered":"Redis&#8217;te Hash Yap\u0131lar\u0131 Nas\u0131l Y\u00f6netilir? Kapsaml\u0131 Bir Rehber"},"content":{"rendered":"<p><body><\/p>\n<h2>Redis&#8217;te Hash Yap\u0131lar\u0131 Nas\u0131l Y\u00f6netilir? Kapsaml\u0131 Bir Rehber<\/h2>\n<p>Redis, a\u00e7\u0131k kaynakl\u0131, bellek i\u00e7i bir veri yap\u0131s\u0131 sunucusu olarak modern uygulama geli\u015ftirmede kritik bir rol oynamaktad\u0131r. Y\u00fcksek performans\u0131, esnek veri modelleri ve geni\u015fletilebilirli\u011fi sayesinde \u00f6nbellekleme, oturum y\u00f6netimi, ger\u00e7ek zamanl\u0131 analitik ve mesajla\u015fma gibi bir\u00e7ok alanda tercih edilmektedir. Redis&#8217;in g\u00fcc\u00fc, sundu\u011fu \u00e7e\u015fitli veri yap\u0131lar\u0131ndan gelir: String&#8217;ler, List&#8217;ler, Set&#8217;ler, Sorted Set&#8217;ler ve Hash&#8217;ler. Bu makalede, Redis&#8217;in en \u00e7ok y\u00f6nl\u00fc ve g\u00fc\u00e7l\u00fc veri yap\u0131lar\u0131ndan biri olan Hash&#8217;leri derinlemesine inceleyecek, nas\u0131l y\u00f6netilece\u011fini, performans ipu\u00e7lar\u0131n\u0131 ve yayg\u0131n kullan\u0131m senaryolar\u0131n\u0131 ele alaca\u011f\u0131z.<\/p>\n<h2>Redis Hash Yap\u0131s\u0131na Yak\u0131ndan Bak\u0131\u015f<\/h2>\n<p>Redis Hash&#8217;leri, bir anahtar (key) alt\u0131nda birden fazla alan (field) ve bu alanlara kar\u015f\u0131l\u0131k gelen de\u011ferlerin (value) sakland\u0131\u011f\u0131 bir harita veya s\u00f6zl\u00fck yap\u0131s\u0131d\u0131r. Geleneksel programlama dillerindeki nesneler (objects), haritalar (maps) veya s\u00f6zl\u00fckler (dictionaries) ile benzer bir mant\u0131\u011fa sahiptir. Her bir Hash anahtar\u0131, kendi i\u00e7inde benzersiz alan-de\u011fer \u00e7iftlerini bar\u0131nd\u0131r\u0131r. Bu yap\u0131, ili\u015fkisel veritabanlar\u0131ndaki bir tablonun tek bir sat\u0131r\u0131n\u0131 veya bir JSON nesnesini temsil etmek i\u00e7in idealdir.<\/p>\n<p>Hash&#8217;lerin temel \u00f6zelli\u011fi, tek bir Redis anahtar\u0131 alt\u0131nda birden fazla \u00f6zniteli\u011fi gruplayabilmesidir. \u00d6rne\u011fin, bir kullan\u0131c\u0131 profilini saklarken, kullan\u0131c\u0131n\u0131n ad\u0131, e-postas\u0131, ya\u015f\u0131 ve son giri\u015f zaman\u0131 gibi bilgileri ayr\u0131 ayr\u0131 String anahtarlar\u0131 olarak saklamak yerine, tek bir <code>user:123<\/code> Hash&#8217;i alt\u0131nda <code>name<\/code>, <code>email<\/code>, <code>age<\/code> ve <code>last_login<\/code> alanlar\u0131 olarak saklayabiliriz. Bu yakla\u015f\u0131m, veri organizasyonunu basitle\u015ftirir, bellek kullan\u0131m\u0131n\u0131 optimize eder ve ilgili verilere atomik olarak eri\u015fimi sa\u011flar.<\/p>\n<p>Redis, dahili olarak k\u00fc\u00e7\u00fck Hash&#8217;leri optimize edilmi\u015f bir bellek yap\u0131s\u0131 olan ziplist kullanarak saklar. Bu, \u00f6zellikle az say\u0131da alan i\u00e7eren Hash&#8217;ler i\u00e7in bellek verimlili\u011fini art\u0131r\u0131r. Hash&#8217;teki alan say\u0131s\u0131 veya alan de\u011ferlerinin boyutu belirli e\u015fikleri a\u015ft\u0131\u011f\u0131nda (varsay\u0131lan olarak <code>hash-max-ziplist-entries 512<\/code> ve <code>hash-max-ziplist-value 64<\/code>), Redis otomatik olarak ziplist&#8217;ten normal bir hash tablosuna (dictionary) d\u00f6n\u00fc\u015f\u00fcm yapar. Bu dinamik optimizasyon, Redis&#8217;in hem k\u00fc\u00e7\u00fck hem de b\u00fcy\u00fck Hash&#8217;leri verimli bir \u015fekilde y\u00f6netmesini sa\u011flar.<\/p>\n<h2>Redis Hash Komutlar\u0131 ve Kullan\u0131m\u0131<\/h2>\n<p>Redis Hash&#8217;lerini y\u00f6netmek i\u00e7in bir dizi \u00f6zel komut bulunmaktad\u0131r. Bu komutlar, veri ekleme, okuma, g\u00fcncelleme ve silme gibi temel i\u015flemleri ger\u00e7ekle\u015ftirmemizi sa\u011flar.<\/p>\n<h3>Veri Ekleme ve G\u00fcncelleme<\/h3>\n<p>Hash&#8217;lere alan-de\u011fer \u00e7iftleri eklemek veya mevcut alanlar\u0131n de\u011ferlerini g\u00fcncellemek i\u00e7in a\u015fa\u011f\u0131daki komutlar kullan\u0131l\u0131r:<\/p>\n<ul>\n<li>\n        <strong><code>HSET <key> <field> <value><\/code><\/strong>: Belirtilen anahtar alt\u0131ndaki Hash&#8217;e tek bir alan-de\u011fer \u00e7ifti ekler veya mevcut bir alan\u0131n de\u011ferini g\u00fcnceller. E\u011fer anahtar yoksa, yeni bir Hash olu\u015fturulur.<\/p>\n<pre><code class=\"language-redis\">HSET user:100 name \"Alice\"\nHSET user:100 email \"alice@example.com\"<\/code><\/pre>\n<p>Redis 4.0 ve sonras\u0131 s\u00fcr\u00fcmlerinde <code>HSET<\/code> komutu birden fazla alan-de\u011fer \u00e7iftini de kabul edebilir, bu da <code>HMSET<\/code>&#8216;in yerine ge\u00e7ebilir:<\/p>\n<pre><code class=\"language-redis\">HSET user:101 name \"Bob\" email \"bob@example.com\" age 30<\/code><\/pre>\n<\/li>\n<li>\n        <strong><code>HMSET <key> <field1> <value1> <field2> <value2> ...<\/code><\/strong>: Birden fazla alan-de\u011fer \u00e7iftini tek bir i\u015flemde ekler veya g\u00fcnceller. Ancak Redis dok\u00fcmantasyonu, bu komutun yerine <code>HSET<\/code>&#8216;in variadic s\u00fcr\u00fcm\u00fcn\u00fcn kullan\u0131lmas\u0131n\u0131 \u00f6nermektedir.<\/p>\n<pre><code class=\"language-redis\">HMSET product:1001 name \"Laptop\" price \"1200.00\" stock \"50\"<\/code><\/pre>\n<\/li>\n<li>\n        <strong><code>HSETNX <key> <field> <value><\/code><\/strong>: Sadece belirtilen alan Hash i\u00e7inde yoksa, alan-de\u011fer \u00e7iftini ekler. E\u011fer alan zaten varsa, hi\u00e7bir i\u015flem yapmaz ve 0 d\u00f6nd\u00fcr\u00fcr. Bu, bir alan\u0131n ilk de\u011ferini ayarlamak i\u00e7in kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<pre><code class=\"language-redis\">HSETNX user:100 age \"25\"  ; Alan yoksa ekler\nHSETNX user:100 age \"26\"  ; Alan zaten oldu\u011fu i\u00e7in eklemez<\/code><\/pre>\n<\/li>\n<\/ul>\n<h3>Veri Okuma<\/h3>\n<p>Hash&#8217;lerden veri okumak i\u00e7in \u00e7e\u015fitli komutlar mevcuttur:<\/p>\n<ul>\n<li>\n        <strong><code>HGET <key> <field><\/code><\/strong>: Belirtilen anahtar alt\u0131ndaki Hash&#8217;ten tek bir alan\u0131n de\u011ferini getirir.<\/p>\n<pre><code class=\"language-redis\">HGET user:100 name  ; \"Alice\" d\u00f6nd\u00fcr\u00fcr<\/code><\/pre>\n<\/li>\n<li>\n        <strong><code>HMGET <key> <field1> <field2> ...<\/code><\/strong>: Belirtilen anahtar alt\u0131ndaki Hash&#8217;ten birden fazla alan\u0131n de\u011ferini tek bir i\u015flemde getirir.<\/p>\n<pre><code class=\"language-redis\">HMGET user:101 name email  ; [\"Bob\", \"bob@example.com\"] d\u00f6nd\u00fcr\u00fcr<\/code><\/pre>\n<\/li>\n<li>\n        <strong><code>HGETALL <key><\/code><\/strong>: Belirtilen anahtar alt\u0131ndaki Hash&#8217;teki t\u00fcm alanlar\u0131 ve de\u011ferlerini getirir. B\u00fcy\u00fck Hash&#8217;ler i\u00e7in dikkatli kullan\u0131lmal\u0131d\u0131r, \u00e7\u00fcnk\u00fc t\u00fcm veriyi tek seferde istemciye aktar\u0131r ve sunucu \u00fczerinde y\u00fcksek CPU\/bellek y\u00fck\u00fcne neden olabilir.<\/p>\n<pre><code class=\"language-redis\">HGETALL user:100\n; 1) \"name\"\n; 2) \"Alice\"\n; 3) \"email\"\n; 4) \"alice@example.com\"\n; 5) \"age\"\n; 6) \"25\"<\/code><\/pre>\n<\/li>\n<li>\n        <strong><code>HKEYS <key><\/code><\/strong>: Belirtilen anahtar alt\u0131ndaki Hash&#8217;teki t\u00fcm alan isimlerini (field names) getirir.<\/p>\n<pre><code class=\"language-redis\">HKEYS user:100  ; [\"name\", \"email\", \"age\"] d\u00f6nd\u00fcr\u00fcr<\/code><\/pre>\n<\/li>\n<li>\n        <strong><code>HVALS <key><\/code><\/strong>: Belirtilen anahtar alt\u0131ndaki Hash&#8217;teki t\u00fcm alan de\u011ferlerini (field values) getirir.<\/p>\n<pre><code class=\"language-redis\">HVALS user:100  ; [\"Alice\", \"alice@example.com\", \"25\"] d\u00f6nd\u00fcr\u00fcr<\/code><\/pre>\n<\/li>\n<\/ul>\n<h3>Veri Silme<\/h3>\n<p>Hash&#8217;lerden alanlar\u0131 silmek i\u00e7in a\u015fa\u011f\u0131daki komut kullan\u0131l\u0131r:<\/p>\n<ul>\n<li>\n        <strong><code>HDEL <key> <field1> <field2> ...<\/code><\/strong>: Belirtilen anahtar alt\u0131ndaki Hash&#8217;ten bir veya daha fazla alan\u0131 siler. Silinen alanlar\u0131n say\u0131s\u0131n\u0131 d\u00f6nd\u00fcr\u00fcr.<\/p>\n<pre><code class=\"language-redis\">HDEL user:100 age  ; 1 d\u00f6nd\u00fcr\u00fcr (e\u011fer 'age' silindiyse)<\/code><\/pre>\n<\/li>\n<\/ul>\n<h3>Di\u011fer Faydal\u0131 Komutlar<\/h3>\n<ul>\n<li>\n        <strong><code>HLEN <key><\/code><\/strong>: Belirtilen anahtar alt\u0131ndaki Hash&#8217;teki alan say\u0131s\u0131n\u0131 d\u00f6nd\u00fcr\u00fcr.<\/p>\n<pre><code class=\"language-redis\">HLEN user:100  ; 2 d\u00f6nd\u00fcr\u00fcr (name, email kald\u0131ysa)<\/code><\/pre>\n<\/li>\n<li>\n        <strong><code>HEXISTS <key> <field><\/code><\/strong>: Belirtilen alan\u0131n Hash i\u00e7inde var olup olmad\u0131\u011f\u0131n\u0131 kontrol eder. Varsa 1, yoksa 0 d\u00f6nd\u00fcr\u00fcr.<\/p>\n<pre><code class=\"language-redis\">HEXISTS user:100 name  ; 1 d\u00f6nd\u00fcr\u00fcr\nHEXISTS user:100 address ; 0 d\u00f6nd\u00fcr\u00fcr<\/code><\/pre>\n<\/li>\n<li>\n        <strong><code>HINCRBY <key> <field> <increment><\/code><\/strong>: Belirtilen alan\u0131n de\u011ferini, verilen art\u0131rma miktar\u0131 kadar art\u0131r\u0131r. Alan\u0131n de\u011feri bir tamsay\u0131 olmal\u0131d\u0131r. E\u011fer alan yoksa, 0 olarak kabul edilir ve art\u0131rma i\u015flemi yap\u0131l\u0131r.<\/p>\n<pre><code class=\"language-redis\">HSET product:1001 stock 50\nHINCRBY product:1001 stock -10  ; stock 40 olur\nHINCRBY product:1001 views 1    ; views 1 olur (\u00f6nceden yoktu)<\/code><\/pre>\n<\/li>\n<li>\n        <strong><code>HINCRBYFLOAT <key> <field> <increment><\/code><\/strong>: <code>HINCRBY<\/code> ile ayn\u0131d\u0131r, ancak ondal\u0131kl\u0131 say\u0131larla \u00e7al\u0131\u015f\u0131r.<\/p>\n<pre><code class=\"language-redis\">HSET product:1001 rating 4.5\nHINCRBYFLOAT product:1001 rating 0.2  ; rating 4.7 olur<\/code><\/pre>\n<\/li>\n<li>\n        <strong><code>HSCAN <key> <cursor> [MATCH <pattern>] [COUNT <count>]<\/code><\/strong>: B\u00fcy\u00fck Hash&#8217;ler \u00fczerinde yinelemeli olarak alanlar\u0131 ve de\u011ferlerini taramak i\u00e7in kullan\u0131l\u0131r. <code>HGETALL<\/code>&#8216;\u0131n aksine, sunucuyu bloke etmez ve k\u00fc\u00e7\u00fck par\u00e7alar halinde veri d\u00f6nd\u00fcr\u00fcr. Cursor 0 oldu\u011funda tarama ba\u015flar ve d\u00f6nen cursor tekrar 0 olana kadar devam eder.<\/p>\n<pre><code class=\"language-redis\">HSCAN user:100 0 MATCH <em>a<\/em> COUNT 10<\/code><\/pre>\n<\/li>\n<\/ul>\n<h2>Kullan\u0131m Senaryolar\u0131 ve Pratik \u00d6rnekler<\/h2>\n<p>Redis Hash&#8217;leri, \u00e7e\u015fitli uygulama senaryolar\u0131nda son derece faydal\u0131d\u0131r. \u0130\u015fte baz\u0131 yayg\u0131n kullan\u0131m \u00f6rnekleri:<\/p>\n<h3>Kullan\u0131c\u0131 Profilleri ve Ayarlar\u0131<\/h3>\n<p>Bir web uygulamas\u0131nda kullan\u0131c\u0131 profillerini veya ayarlar\u0131n\u0131 depolamak i\u00e7in Hash&#8217;ler idealdir. Her kullan\u0131c\u0131 i\u00e7in benzersiz bir Hash anahtar\u0131 olu\u015fturulur ve kullan\u0131c\u0131n\u0131n t\u00fcm \u00f6znitelikleri bu Hash alt\u0131nda saklan\u0131r.<\/p>\n<pre><code class=\"language-redis\">HSET user:profile:1001 username \"john_doe\" email \"john@example.com\" age 30 country \"USA\" last_login \"2023-10-27T10:30:00Z\"\nHGET user:profile:1001 username\nHGETALL user:profile:1001\nHDEL user:profile:1001 country<\/code><\/pre>\n<p>Bu yakla\u015f\u0131m, bir kullan\u0131c\u0131n\u0131n t\u00fcm bilgilerini tek bir Redis \u00e7a\u011fr\u0131s\u0131yla almay\u0131 veya g\u00fcncellemek i\u00e7in atomik i\u015flemler yapmay\u0131 kolayla\u015ft\u0131r\u0131r.<\/p>\n<h3>\u00dcr\u00fcn Kataloglar\u0131 ve Stok Y\u00f6netimi<\/h3>\n<p>E-ticaret uygulamalar\u0131nda \u00fcr\u00fcn bilgilerini ve stok durumunu y\u00f6netmek i\u00e7in Hash&#8217;ler kullan\u0131labilir. Her \u00fcr\u00fcn i\u00e7in bir Hash anahtar\u0131 tan\u0131mlan\u0131r.<\/p>\n<pre><code class=\"language-redis\">HSET product:SKU456 name \"Smartwatch\" description \"Latest model smartwatch\" price \"299.99\" stock 150 category \"Electronics\"\nHGET product:SKU456 price\nHINCRBY product:SKU456 stock -1 ; Bir sat\u0131\u015f sonras\u0131 sto\u011fu azalt\nHGET product:SKU456 stock<\/code><\/pre>\n<p>Stok g\u00fcncelleme gibi i\u015flemler <code>HINCRBY<\/code> ile atomik olarak ger\u00e7ekle\u015ftirilebilir, bu da yar\u0131\u015f ko\u015fullar\u0131n\u0131 (race conditions) \u00f6nler.<\/p>\n<h3>Oturum Y\u00f6netimi<\/h3>\n<p>Web uygulamalar\u0131nda kullan\u0131c\u0131 oturum verilerini depolamak i\u00e7in Hash&#8217;ler s\u0131k\u00e7a kullan\u0131l\u0131r. Oturum ID&#8217;si anahtar olarak kullan\u0131l\u0131r ve oturumla ilgili t\u00fcm veriler (kullan\u0131c\u0131 ID&#8217;si, giri\u015f zaman\u0131, IP adresi, sepet i\u00e7eri\u011fi vb.) Hash alanlar\u0131 olarak saklan\u0131r.<\/p>\n<pre><code class=\"language-redis\">HSET session:abc123def456 user_id 789 login_time 1678886400 ip_address \"192.168.1.10\" cart_items \"item1,item2\"\nEXPIRE session:abc123def456 3600 ; Oturumu 1 saat sonra sona erdir\nHGET session:abc123def456 user_id\nHGETALL session:abc123def456<\/code><\/pre>\n<p><code>EXPIRE<\/code> komutu ile t\u00fcm oturum Hash&#8217;ine bir ya\u015fam s\u00fcresi (TTL) atanabilir, b\u00f6ylece s\u00fcresi dolan oturumlar otomatik olarak silinir.<\/p>\n<h3>Ger\u00e7ek Zamanl\u0131 Analitik ve Saya\u00e7lar<\/h3>\n<p>Belirli olaylar\u0131n veya metriklerin say\u0131s\u0131n\u0131 tutmak i\u00e7in Hash&#8217;ler kullan\u0131labilir. \u00d6rne\u011fin, bir makalenin g\u00fcnl\u00fck g\u00f6r\u00fcnt\u00fclenme say\u0131s\u0131 veya bir web sayfas\u0131ndaki t\u0131klama saya\u00e7lar\u0131.<\/p>\n<pre><code class=\"language-redis\">HINCRBY article:views:123 today 1\nHINCRBY article:views:123 total 1\nHINCRBY article:views:123 \"2023-10-27\" 1\nHGETALL article:views:123<\/code><\/pre>\n<p>Bu, farkl\u0131 zaman dilimlerine veya kategorilere g\u00f6re saya\u00e7lar\u0131 tek bir anahtar alt\u0131nda gruplamay\u0131 sa\u011flar.<\/p>\n<h2>Performans ve Bellek Optimizasyonu<\/h2>\n<p>Redis Hash&#8217;leri, do\u011fru kullan\u0131ld\u0131\u011f\u0131nda hem performansl\u0131 hem de bellek a\u00e7\u0131s\u0131ndan verimlidir. Ancak b\u00fcy\u00fck Hash&#8217;ler veya yanl\u0131\u015f kullan\u0131m, performans sorunlar\u0131na yol a\u00e7abilir.<\/p>\n<h3>K\u00fc\u00e7\u00fck Hash&#8217;ler (Small Hashes)<\/h3>\n<p>Redis, k\u00fc\u00e7\u00fck Hash&#8217;leri optimize edilmi\u015f bir bellek yap\u0131s\u0131 olan ziplist (veya listpack, Redis 7.0 sonras\u0131) kullanarak saklar. Bu, Hash&#8217;in alan say\u0131s\u0131 ve alan de\u011ferlerinin boyutu belirli e\u015fiklerin alt\u0131nda kald\u0131\u011f\u0131 s\u00fcrece ge\u00e7erlidir. Bu e\u015fikler Redis yap\u0131land\u0131rma dosyas\u0131nda (<code>redis.conf<\/code>) a\u015fa\u011f\u0131daki parametrelerle ayarlan\u0131r:<\/p>\n<ul>\n<li>\n        <strong><code>hash-max-ziplist-entries <count><\/code><\/strong>: Bir Hash&#8217;teki alan say\u0131s\u0131 bu de\u011feri a\u015ft\u0131\u011f\u0131nda, Redis ziplist yerine normal bir hash tablosuna ge\u00e7er. Varsay\u0131lan de\u011fer 512&#8217;dir.\n    <\/li>\n<li>\n        <strong><code>hash-max-ziplist-value <bytes><\/code><\/strong>: Bir alan\u0131n de\u011feri bu bayt boyutunu a\u015ft\u0131\u011f\u0131nda, Redis ziplist yerine normal bir hash tablosuna ge\u00e7er. Varsay\u0131lan de\u011fer 64 baytt\u0131r.\n    <\/li>\n<\/ul>\n<p>Ziplist, biti\u015fik bellek bloklar\u0131n\u0131 kullanarak veri saklad\u0131\u011f\u0131 i\u00e7in bellek \u00fczerinde daha az yer kaplar ve CPU \u00f6nbelle\u011fi dostudur. Bu nedenle, m\u00fcmk\u00fcn oldu\u011funca k\u00fc\u00e7\u00fck Hash&#8217;ler kullanmak bellek verimlili\u011fi a\u00e7\u0131s\u0131ndan \u00f6nemlidir.<\/p>\n<h3>B\u00fcy\u00fck Hash&#8217;ler (Large Hashes)<\/h3>\n<p>Bir Hash ziplist e\u015fiklerini a\u015ft\u0131\u011f\u0131nda ve normal bir hash tablosuna d\u00f6n\u00fc\u015ft\u00fc\u011f\u00fcnde, bellek kullan\u0131m\u0131 artar. Ayr\u0131ca, \u00e7ok b\u00fcy\u00fck Hash&#8217;ler \u00fczerinde <code>HGETALL<\/code>, <code>HKEYS<\/code> veya <code>HVALS<\/code> gibi komutlar\u0131 kullanmak sunucu \u00fczerinde \u00f6nemli bir y\u00fck olu\u015fturabilir:<\/p>\n<ul>\n<li>\n        <strong>Performans Etkisi:<\/strong> Bu komutlar t\u00fcm Hash&#8217;i tarar ve t\u00fcm veriyi istemciye tek seferde g\u00f6nderir. Bu, a\u011f gecikmesine ve sunucu CPU&#8217;sunda ani y\u00fckseli\u015flere neden olabilir, \u00f6zellikle Redis tek i\u015f par\u00e7ac\u0131kl\u0131 bir yap\u0131ya sahip oldu\u011fu i\u00e7in di\u011fer komutlar\u0131 bloke edebilir.\n    <\/li>\n<li>\n        <strong>\u00c7\u00f6z\u00fcm: <code>HSCAN<\/code> Kullan\u0131m\u0131:<\/strong> B\u00fcy\u00fck Hash&#8217;ler \u00fczerinde yinelemeli tarama yapmak i\u00e7in <code>HSCAN<\/code> komutu kullan\u0131lmal\u0131d\u0131r. <code>HSCAN<\/code>, bir kursor tabanl\u0131 yakla\u015f\u0131m kullanarak Hash&#8217;i k\u00fc\u00e7\u00fck par\u00e7alar halinde tarar ve sunucuyu bloke etmez. Bu, b\u00fcy\u00fck veri k\u00fcmeleriyle \u00e7al\u0131\u015f\u0131rken daha g\u00fcvenli ve performansl\u0131 bir y\u00f6ntemdir.\n    <\/li>\n<li>\n        <strong>Hash&#8217;leri Par\u00e7alara Ay\u0131rma (Sharding):<\/strong> Bir Hash&#8217;in \u00e7ok b\u00fcy\u00fcmesini \u00f6nlemek i\u00e7in, veriyi mant\u0131ksal olarak daha k\u00fc\u00e7\u00fck Hash&#8217;lere b\u00f6lmek bir strateji olabilir. \u00d6rne\u011fin, bir kullan\u0131c\u0131n\u0131n ana profil bilgilerini bir Hash&#8217;te, ayarlar\u0131n\u0131 ba\u015fka bir Hash&#8217;te saklamak gibi. Bu, &#8220;hot key&#8221; sorununu (tek bir anahtar\u0131n a\u015f\u0131r\u0131 y\u00fcklenmesi) hafifletebilir.<\/li>\n<\/ul>\n<h3>Atomik \u0130\u015flemler<\/h3>\n<p>Redis&#8217;teki t\u00fcm Hash komutlar\u0131 atomiktir. Yani, bir Hash \u00fczerindeki bir i\u015flem (\u00f6rne\u011fin <code>HSET<\/code> veya <code>HINCRBY<\/code>) tamamen ger\u00e7ekle\u015fir veya hi\u00e7 ger\u00e7ekle\u015fmez. Bu, \u00e7oklu istemcilerin ayn\u0131 Hash \u00fczerinde e\u015fzamanl\u0131 olarak i\u015flem yaparken veri tutarl\u0131l\u0131\u011f\u0131n\u0131 sa\u011flar. Birden fazla alan\u0131 tek bir <code>HSET<\/code> veya <code>HMSET<\/code> \u00e7a\u011fr\u0131s\u0131yla g\u00fcncellemek de atomik bir i\u015flemdir.<\/p>\n<p>Daha karma\u015f\u0131k atomik i\u015flemler i\u00e7in Redis Lua betikleri kullan\u0131labilir. Lua betikleri, sunucu taraf\u0131nda birden fazla Redis komutunu tek bir atomik i\u015flem olarak \u00e7al\u0131\u015ft\u0131rman\u0131za olanak tan\u0131r, bu da a\u011f gecikmesini azalt\u0131r ve karma\u015f\u0131k mant\u0131klar\u0131n g\u00fcvenli bir \u015fekilde y\u00fcr\u00fct\u00fclmesini sa\u011flar.<\/p>\n<h3>TTL (Time To Live) ile Hash Y\u00f6netimi<\/h3>\n<p>Redis&#8217;te, bir Hash&#8217;in tamam\u0131na bir ya\u015fam s\u00fcresi (TTL) atanabilir. Bu, <code>EXPIRE <key> <seconds><\/code> komutu ile yap\u0131l\u0131r. TTL sona erdi\u011finde, Hash anahtar\u0131 ve t\u00fcm i\u00e7eri\u011fi Redis&#8217;ten otomatik olarak silinir.<\/p>\n<pre><code class=\"language-redis\">HSET temporary_data:1 data \"some_value\" timestamp 1678886400\nEXPIRE temporary_data:1 300 ; 5 dakika sonra sil<\/code><\/pre>\n<p>Ancak, Redis Hash&#8217;lerinde alan baz\u0131nda (field-specific) TTL atama \u00f6zelli\u011fi bulunmamaktad\u0131r. E\u011fer Hash i\u00e7indeki belirli alanlar\u0131n farkl\u0131 ya\u015fam s\u00fcrelerine sahip olmas\u0131 gerekiyorsa, bu durumda Hash yerine ayr\u0131 String anahtarlar veya Sorted Set&#8217;ler gibi farkl\u0131 veri yap\u0131lar\u0131 d\u00fc\u015f\u00fcn\u00fclmelidir. \u00d6rne\u011fin, her alan i\u00e7in ayr\u0131 bir anahtar kullan\u0131p her birine TTL atamak veya Sorted Set&#8217;i zaman damgas\u0131 (timestamp) ile s\u0131ralay\u0131p s\u00fcresi dolan \u00f6\u011feleri periyodik olarak temizlemek gibi stratejiler izlenebilir.<\/p>\n<h2>Hash&#8217;lerin Dezavantajlar\u0131 ve Alternatifler<\/h2>\n<p>Hash&#8217;ler g\u00fc\u00e7l\u00fc olsa da, her veri yap\u0131s\u0131 gibi kendi s\u0131n\u0131rlamalar\u0131 vard\u0131r. Bu s\u0131n\u0131rlamalar\u0131 anlamak ve gerekti\u011finde alternatif \u00e7\u00f6z\u00fcmlere y\u00f6nelmek \u00f6nemlidir.<\/p>\n<h3>Alan Baz\u0131nda TTL Yoklu\u011fu<\/h3>\n<p>Daha \u00f6nce de belirtildi\u011fi gibi, Redis Hash&#8217;lerinde alan baz\u0131nda TTL atama \u00f6zelli\u011fi yoktur. T\u00fcm Hash i\u00e7in tek bir TTL belirlenebilir. E\u011fer uygulaman\u0131zda Hash i\u00e7indeki farkl\u0131 \u00f6zniteliklerin farkl\u0131 ya\u015fam s\u00fcreleri olmas\u0131 gerekiyorsa, bu bir k\u0131s\u0131tlama olabilir.<\/p>\n<p><strong>\u00c7\u00f6z\u00fcm \u00d6nerileri:<\/strong><\/p>\n<ul>\n<li>Her bir alan\u0131 ayr\u0131 bir Redis String anahtar\u0131 olarak saklay\u0131p her birine ayr\u0131 TTL atamak. Ancak bu, ilgili verileri tek bir anahtar alt\u0131nda gruplama avantaj\u0131n\u0131 ortadan kald\u0131r\u0131r.<\/li>\n<li>Hash&#8217;i birden fazla Hash&#8217;e b\u00f6lmek ve her bir Hash&#8217;e ayr\u0131 TTL atamak.<\/li>\n<li>Sorted Set&#8217;leri kullanarak, s\u00fcresi dolacak alanlar\u0131 bir zaman damgas\u0131 (score) ile saklamak ve d\u00fczenli olarak s\u00fcresi dolanlar\u0131 temizlemek i\u00e7in bir arka plan g\u00f6revi (worker) \u00e7al\u0131\u015ft\u0131rmak.<\/li>\n<\/ul>\n<h3>T\u00fcm Hash&#8217;i Okuma Maliyeti (HGETALL)<\/h3>\n<p><code>HGETALL<\/code> komutu, b\u00fcy\u00fck Hash&#8217;ler i\u00e7in performans sorunlar\u0131na yol a\u00e7abilir. T\u00fcm Hash&#8217;in i\u00e7eri\u011fini tek seferde istemciye g\u00f6ndermek, a\u011f bant geni\u015fli\u011fini t\u00fcketebilir ve Redis sunucusunu bloke edebilir.<\/p>\n<p><strong>\u00c7\u00f6z\u00fcm \u00d6nerileri:<\/strong><\/p>\n<ul>\n<li>B\u00fcy\u00fck Hash&#8217;ler i\u00e7in her zaman <code>HSCAN<\/code> kullan\u0131n. Bu, veriyi k\u00fc\u00e7\u00fck par\u00e7alar halinde alman\u0131z\u0131 sa\u011flar ve sunucuyu bloke etmez.<\/li>\n<li>Yaln\u0131zca ihtiyac\u0131n\u0131z olan alanlar\u0131 <code>HGET<\/code> veya <code>HMGET<\/code> ile isteyin. T\u00fcm Hash&#8217;i \u00e7ekmek yerine, sadece ilgili alanlar\u0131 hedefleyin.<\/li>\n<\/ul>\n<h3>Tek Bir Anahtar\u0131n A\u015f\u0131r\u0131 B\u00fcy\u00fcmesi (Hot Key)<\/h3>\n<p>\u00c7ok say\u0131da alan i\u00e7eren veya s\u0131k\u00e7a eri\u015filen tek bir Hash anahtar\u0131 (hot key), da\u011f\u0131t\u0131k Redis k\u00fcmelerinde performans darbo\u011faz\u0131na neden olabilir. T\u00fcm istemci istekleri tek bir Redis d\u00fc\u011f\u00fcm\u00fcne veya anahtara y\u00f6nlendirildi\u011finde, bu d\u00fc\u011f\u00fcm a\u015f\u0131r\u0131 y\u00fcklenebilir.<\/p>\n<p><strong>\u00c7\u00f6z\u00fcm \u00d6nerileri:<\/strong><\/p>\n<ul>\n<li>Hash&#8217;i mant\u0131ksal olarak daha k\u00fc\u00e7\u00fck par\u00e7alara ay\u0131r\u0131n. \u00d6rne\u011fin, bir kullan\u0131c\u0131n\u0131n profilini <code>user:profile:123<\/code>, ayarlar\u0131n\u0131 <code>user:settings:123<\/code> gibi farkl\u0131 anahtarlarda saklay\u0131n.<\/li>\n<li>E\u011fer veri modeli izin veriyorsa, farkl\u0131 veri yap\u0131lar\u0131n\u0131 birle\u015ftirin. \u00d6rne\u011fin, s\u0131k de\u011fi\u015fen verileri ayr\u0131 String&#8217;lerde, daha statik verileri Hash&#8217;te tutun.<\/li>\n<li>Redis Cluster kullan\u0131yorsan\u0131z, anahtarlar\u0131n farkl\u0131 slotlara da\u011f\u0131ld\u0131\u011f\u0131ndan emin olun.<\/li>\n<\/ul>\n<h2>Geli\u015fmi\u015f Konular ve En \u0130yi Uygulamalar<\/h2>\n<p>Redis Hash&#8217;lerinden en iyi \u015fekilde yararlanmak i\u00e7in baz\u0131 geli\u015fmi\u015f teknikler ve en iyi uygulamalar mevcuttur.<\/p>\n<h3>Pipeline Kullan\u0131m\u0131<\/h3>\n<p>Birden fazla Redis komutunu tek bir a\u011f gidi\u015f-d\u00f6n\u00fc\u015f\u00fcnde (round-trip) g\u00f6ndermek i\u00e7in Pipeline (boru hatt\u0131) kullanmak, performans\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rabilir. \u00d6zellikle bir Hash&#8217;e birden fazla alan eklerken veya birden fazla alan\u0131 okurken faydal\u0131d\u0131r.<\/p>\n<pre><code class=\"language-redis\"># Python \u00f6rne\u011fi\nimport redis\nr = redis.Redis()\npipe = r.pipeline()\npipe.hset(\"user:102\", \"name\", \"Charlie\")\npipe.hset(\"user:102\", \"email\", \"charlie@example.com\")\npipe.hset(\"user:102\", \"age\", 40)\npipe.execute()<\/code><\/pre>\n<p>Bu, her <code>HSET<\/code> komutu i\u00e7in ayr\u0131 bir a\u011f iste\u011fi yapmak yerine, t\u00fcm komutlar\u0131 tek bir toplu istekte g\u00f6nderir.<\/p>\n<h3>Lua Scriptleri ile Karma\u015f\u0131k Mant\u0131k<\/h3>\n<p>Redis Lua betikleri, sunucu taraf\u0131nda karma\u015f\u0131k, atomik ve verimli i\u015flemler ger\u00e7ekle\u015ftirmek i\u00e7in kullan\u0131labilir. Birden fazla Hash komutunu veya farkl\u0131 veri yap\u0131lar\u0131 \u00fczerindeki i\u015flemleri tek bir atomik birimde birle\u015ftirebilirsiniz. Bu, a\u011f gecikmesini azalt\u0131r ve yar\u0131\u015f ko\u015fullar\u0131n\u0131 \u00f6nler.<\/p>\n<p>\u00d6rne\u011fin, bir \u00fcr\u00fcn\u00fcn sto\u011funu azalt\u0131rken ayn\u0131 zamanda bir sipari\u015f kayd\u0131n\u0131 olu\u015fturmak gibi \u00e7ok ad\u0131ml\u0131 bir i\u015flemi atomik olarak ger\u00e7ekle\u015ftirebilirsiniz:<\/p>\n<pre><code class=\"language-lua\">-- Lua script \u00f6rne\u011fi: Stok azalt ve i\u015flem kaydet\nlocal product_key = KEYS[1]\nlocal field_stock = ARGV[1]\nlocal decrement_amount = tonumber(ARGV[2])\nlocal transaction_key = KEYS[2]\nlocal transaction_id = ARGV[3]\nlocal user_id = ARGV[4]\n\nlocal current_stock = tonumber(redis.call('HGET', product_key, field_stock))\n\nif current_stock and current_stock >= decrement_amount then\n    redis.call('HINCRBY', product_key, field_stock, -decrement_amount)\n    redis.call('HSET', transaction_key, transaction_id, user_id .. \":\" .. decrement_amount .. \":\" .. os.time())\n    return 1 -- Ba\u015far\u0131l\u0131\nelse\n    return 0 -- Yetersiz stok\nend<\/code><\/pre>\n<pre><code class=\"language-redis\">EVAL \"...\" 2 product:1001 transactions:2023 stock 1 12345 user:500<\/code><\/pre>\n<p>Bu Lua beti\u011fi, stok kontrol\u00fcn\u00fc ve g\u00fcncellemesini atomik olarak yapar, ayn\u0131 zamanda bir i\u015flem kayd\u0131 tutar. T\u00fcm bu i\u015flemler tek bir sunucu \u00e7a\u011fr\u0131s\u0131nda ger\u00e7ekle\u015fir.<\/p>\n<h3>Veri Modelleme Stratejileri<\/h3>\n<p>Redis&#8217;te veri modellemesi yaparken, Hash&#8217;lerin ne zaman kullan\u0131laca\u011f\u0131n\u0131 ve ne zaman di\u011fer veri yap\u0131lar\u0131n\u0131 tercih edece\u011finizi bilmek \u00f6nemlidir:<\/p>\n<ul>\n<li>\n        <strong>Hash Kullan\u0131m\u0131:<\/strong> Bir nesnenin veya kayd\u0131n birden fazla \u00f6zniteli\u011fini tek bir anahtar alt\u0131nda gruplamak istedi\u011finizde Hash&#8217;ler idealdir. T\u00fcm \u00f6zniteliklere s\u0131k\u00e7a birlikte eri\u015filiyorsa veya atomik olarak g\u00fcncellenmeleri gerekiyorsa Hash&#8217;ler mant\u0131kl\u0131d\u0131r.\n    <\/li>\n<li>\n        <strong>String Kullan\u0131m\u0131:<\/strong> E\u011fer bir nesnenin sadece tek bir \u00f6zniteli\u011fini sakl\u0131yorsan\u0131z veya verinin tamam\u0131 JSON gibi serile\u015ftirilmi\u015f tek bir String olarak depolanabiliyorsa, String&#8217;ler daha basit ve bazen daha verimli olabilir.\n    <\/li>\n<li>\n        <strong>Set\/Sorted Set\/List Kullan\u0131m\u0131:<\/strong> \u0130li\u015fkisel veriler, listeler, benzersiz \u00f6\u011fe koleksiyonlar\u0131 veya s\u0131ral\u0131 veriler i\u00e7in bu yap\u0131lar daha uygun olabilir. \u00d6rne\u011fin, bir kullan\u0131c\u0131n\u0131n takip etti\u011fi ki\u015fileri Set&#8217;te, son 10 aktivitesini List&#8217;te tutmak gibi.\n    <\/li>\n<\/ul>\n<p>Veri eri\u015fim desenlerinizi (hangi verilere ne s\u0131kl\u0131kla ve nas\u0131l eri\u015filiyor) analiz ederek en uygun veri yap\u0131s\u0131n\u0131 se\u00e7mek, performans\u0131 ve bellek verimlili\u011fini art\u0131racakt\u0131r.<\/p>\n<h3>Bellek T\u00fcketimi \u0130zleme<\/h3>\n<p>Redis Hash&#8217;lerinin bellek t\u00fcketimini anlamak ve optimize etmek i\u00e7in a\u015fa\u011f\u0131daki komutlar kullan\u0131labilir:<\/p>\n<ul>\n<li>\n        <strong><code>INFO MEMORY<\/code><\/strong>: Redis sunucusunun genel bellek kullan\u0131m istatistiklerini g\u00f6sterir.\n    <\/li>\n<li>\n        <strong><code>MEMORY USAGE <key><\/code><\/strong>: Belirli bir anahtar\u0131n (Hash dahil) bellek t\u00fcketimini bayt cinsinden d\u00f6nd\u00fcr\u00fcr. Bu, b\u00fcy\u00fck Hash&#8217;leri tespit etmek i\u00e7in \u00e7ok kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<pre><code class=\"language-redis\">MEMORY USAGE user:profile:1001<\/code><\/pre>\n<\/li>\n<li>\n        <strong><code>redis-cli --hotkeys<\/code><\/strong>: En \u00e7ok eri\u015filen (hot) anahtarlar\u0131 bulmak i\u00e7in kullan\u0131labilir. Bu, Hash&#8217;lerin a\u015f\u0131r\u0131 y\u00fcklenmesini \u00f6nlemek i\u00e7in \u00f6nemlidir.\n    <\/li>\n<\/ul>\n<p>Bu ara\u00e7larla d\u00fczenli olarak bellek kullan\u0131m\u0131n\u0131 izlemek ve b\u00fcy\u00fck Hash&#8217;leri optimize etmek, Redis sunucunuzun istikrarl\u0131 ve performansl\u0131 \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar.<\/p>\n<h2>Sonu\u00e7<\/h2>\n<p>Redis Hash&#8217;leri, anahtar-de\u011fer \u00e7iftlerinin g\u00fc\u00e7l\u00fc ve esnek bir koleksiyonunu sunarak modern uygulama geli\u015ftirmede \u00f6nemli bir yer tutar. Kullan\u0131c\u0131 profillerinden \u00fcr\u00fcn kataloglar\u0131na, oturum y\u00f6netiminden ger\u00e7ek zamanl\u0131 analitiklere kadar geni\u015f bir yelpazede kullan\u0131m senaryolar\u0131na sahiptirler.<\/p>\n<p>Do\u011fru komutlar\u0131 kullanarak Hash&#8217;leri etkin bir \u015fekilde y\u00f6netmek, bellek optimizasyon stratejilerini uygulamak (k\u00fc\u00e7\u00fck Hash&#8217;ler i\u00e7in ziplist avantaj\u0131, b\u00fcy\u00fck Hash&#8217;ler i\u00e7in <code>HSCAN<\/code> kullan\u0131m\u0131) ve atomik i\u015flemleri anlamak, Redis Hash&#8217;lerinden en y\u00fcksek verimi alman\u0131z\u0131 sa\u011flar. Ayr\u0131ca, Hash&#8217;lerin s\u0131n\u0131rlamalar\u0131n\u0131 (alan baz\u0131nda TTL olmamas\u0131 gibi) bilmek ve gerekti\u011finde alternatif veri yap\u0131lar\u0131na y\u00f6nelmek veya Lua betikleri gibi geli\u015fmi\u015f teknikleri kullanmak, daha sa\u011flam ve \u00f6l\u00e7eklenebilir uygulamalar geli\u015ftirmenize yard\u0131mc\u0131 olacakt\u0131r.<\/p>\n<p>Redis Hash&#8217;leri, veri modellemenizde esneklik ve performans arayan geli\u015ftiriciler i\u00e7in vazge\u00e7ilmez bir ara\u00e7t\u0131r. Bu kapsaml\u0131 rehberin, Redis Hash&#8217;lerini anlama ve etkin bir \u015fekilde y\u00f6netme yolculu\u011funuzda size yol g\u00f6stermesini umuyoruz.<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Redis&#8217;te Hash Yap\u0131lar\u0131 Nas\u0131l Y\u00f6netilir? Kapsaml\u0131 Bir Rehber\nRedis, a\u00e7\u0131k kaynakl\u0131, bellek i\u00e7i bir veri yap\u0131s\u0131 sunucusu olarak modern uygula","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-35253","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>Redis&#039;te Hash Yap\u0131lar\u0131 Nas\u0131l Y\u00f6netilir? Kapsaml\u0131 Bir 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\/rediste-hash-yapilari-nasil-yonetilir-kapsamli-bir-rehber\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Redis&#039;te Hash Yap\u0131lar\u0131 Nas\u0131l Y\u00f6netilir? Kapsaml\u0131 Bir Rehber\" \/>\n<meta property=\"og:description\" content=\"Redis&#039;te Hash Yap\u0131lar\u0131 Nas\u0131l Y\u00f6netilir? Kapsaml\u0131 Bir Rehber Redis, a\u00e7\u0131k kaynakl\u0131, bellek i\u00e7i bir veri yap\u0131s\u0131 sunucusu olarak modern uygula\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/rediste-hash-yapilari-nasil-yonetilir-kapsamli-bir-rehber\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-27T09:40:51+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=\"16 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/rediste-hash-yapilari-nasil-yonetilir-kapsamli-bir-rehber\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/rediste-hash-yapilari-nasil-yonetilir-kapsamli-bir-rehber\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Redis&#8217;te Hash Yap\u0131lar\u0131 Nas\u0131l Y\u00f6netilir? Kapsaml\u0131 Bir Rehber\",\"datePublished\":\"2025-11-27T09:40:51+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/rediste-hash-yapilari-nasil-yonetilir-kapsamli-bir-rehber\/\"},\"wordCount\":2827,\"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\/rediste-hash-yapilari-nasil-yonetilir-kapsamli-bir-rehber\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/rediste-hash-yapilari-nasil-yonetilir-kapsamli-bir-rehber\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/rediste-hash-yapilari-nasil-yonetilir-kapsamli-bir-rehber\/\",\"name\":\"Redis'te Hash Yap\u0131lar\u0131 Nas\u0131l Y\u00f6netilir? Kapsaml\u0131 Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-27T09:40:51+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/rediste-hash-yapilari-nasil-yonetilir-kapsamli-bir-rehber\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/rediste-hash-yapilari-nasil-yonetilir-kapsamli-bir-rehber\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/rediste-hash-yapilari-nasil-yonetilir-kapsamli-bir-rehber\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Redis&#8217;te Hash Yap\u0131lar\u0131 Nas\u0131l Y\u00f6netilir? Kapsaml\u0131 Bir 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":"Redis'te Hash Yap\u0131lar\u0131 Nas\u0131l Y\u00f6netilir? Kapsaml\u0131 Bir 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\/rediste-hash-yapilari-nasil-yonetilir-kapsamli-bir-rehber\/","og_locale":"tr_TR","og_type":"article","og_title":"Redis'te Hash Yap\u0131lar\u0131 Nas\u0131l Y\u00f6netilir? Kapsaml\u0131 Bir Rehber","og_description":"Redis'te Hash Yap\u0131lar\u0131 Nas\u0131l Y\u00f6netilir? Kapsaml\u0131 Bir Rehber Redis, a\u00e7\u0131k kaynakl\u0131, bellek i\u00e7i bir veri yap\u0131s\u0131 sunucusu olarak modern uygula","og_url":"https:\/\/fatihsoysal.com\/blog\/rediste-hash-yapilari-nasil-yonetilir-kapsamli-bir-rehber\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-27T09:40:51+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"16 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/rediste-hash-yapilari-nasil-yonetilir-kapsamli-bir-rehber\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/rediste-hash-yapilari-nasil-yonetilir-kapsamli-bir-rehber\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Redis&#8217;te Hash Yap\u0131lar\u0131 Nas\u0131l Y\u00f6netilir? Kapsaml\u0131 Bir Rehber","datePublished":"2025-11-27T09:40:51+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/rediste-hash-yapilari-nasil-yonetilir-kapsamli-bir-rehber\/"},"wordCount":2827,"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\/rediste-hash-yapilari-nasil-yonetilir-kapsamli-bir-rehber\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/rediste-hash-yapilari-nasil-yonetilir-kapsamli-bir-rehber\/","url":"https:\/\/fatihsoysal.com\/blog\/rediste-hash-yapilari-nasil-yonetilir-kapsamli-bir-rehber\/","name":"Redis'te Hash Yap\u0131lar\u0131 Nas\u0131l Y\u00f6netilir? Kapsaml\u0131 Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-27T09:40:51+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/rediste-hash-yapilari-nasil-yonetilir-kapsamli-bir-rehber\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/rediste-hash-yapilari-nasil-yonetilir-kapsamli-bir-rehber\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/rediste-hash-yapilari-nasil-yonetilir-kapsamli-bir-rehber\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Redis&#8217;te Hash Yap\u0131lar\u0131 Nas\u0131l Y\u00f6netilir? Kapsaml\u0131 Bir 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\/35253","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=35253"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35253\/revisions"}],"predecessor-version":[{"id":35254,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35253\/revisions\/35254"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=35253"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=35253"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=35253"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}