{"id":41504,"date":"2026-04-29T21:04:23","date_gmt":"2026-04-29T18:04:23","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/rediste-kesintisiz-veri-guncelleme-temporary-key-pattern-rehberi\/"},"modified":"2026-04-29T21:04:23","modified_gmt":"2026-04-29T18:04:23","slug":"rediste-kesintisiz-veri-guncelleme-temporary-key-pattern-rehberi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/rediste-kesintisiz-veri-guncelleme-temporary-key-pattern-rehberi\/","title":{"rendered":"Redis&#8217;te Kesintisiz Veri G\u00fcncelleme: Temporary Key Pattern Rehberi"},"content":{"rendered":"<h2>Redis&#8217;te Kesintisiz Veri G\u00fcncelleme: Temporary Key Pattern Rehberi<\/h2>\n<p>Redis \u00fczerinde b\u00fcy\u00fck veri setlerini g\u00fcncellerken kesinti ya\u015famadan ve atomik bir \u015fekilde i\u015flem yapman\u0131z\u0131 sa\u011flayan Temporary Key Pattern (Ge\u00e7ici Anahtar Deseni) y\u00f6ntemini ke\u015ffedin. Modern web mimarilerinde veri tutarl\u0131l\u0131\u011f\u0131n\u0131 sa\u011flamak, performans kadar kritik bir \u00f6neme sahiptir.<\/p>\n<p>Y\u00fcksek trafikli bir sistem y\u00f6netti\u011finizi hayal edin. Redis \u00fczerinde milyonlarca kullan\u0131c\u0131n\u0131n oturum bilgilerini, \u00fcr\u00fcn kataloglar\u0131n\u0131 veya anl\u0131k skor tablolar\u0131n\u0131 tutuyorsunuz. Bu verileri g\u00fcncellemeniz gerekti\u011finde, eski veriyi silip yenisini yazmak (Delete-then-Set) milisaniyelik de olsa bir bo\u015fluk yarat\u0131r. \u0130\u015fte bu minik bo\u015fluk, o esnada gelen binlerce iste\u011fin &#8220;veri bulunamad\u0131&#8221; hatas\u0131 almas\u0131na veya veritaban\u0131na (database) a\u015f\u0131r\u0131 y\u00fck binmesine neden olabilir. Bu duruma yaz\u0131l\u0131m d\u00fcnyas\u0131nda &#8220;Cache Stampede&#8221; (\u00d6nbellek \u0130zdiham\u0131) veya &#8220;Race Condition&#8221; (Yar\u0131\u015f Durumu) denir. Bu makalede, bu sorunlar\u0131 k\u00f6kten \u00e7\u00f6zen &#8220;Temporary Key Pattern&#8221; tekni\u011fini, ger\u00e7ek d\u00fcnya senaryolar\u0131yla ve teknik detaylar\u0131yla inceleyece\u011fiz.<\/p>\n<h2>Redis&#8217;te Kesintisiz Veri G\u00fcncelleme Neden \u00d6nemlidir?<\/h2>\n<p>Redis, do\u011fas\u0131 gere\u011fi tek i\u015f par\u00e7ac\u0131kl\u0131 (single-threaded) bir yap\u0131ya sahiptir. Bu durum, komutlar\u0131n s\u0131rayla i\u015flendi\u011fi ve atomik (atomic) oldu\u011fu anlam\u0131na gelir. Ancak, uygulama seviyesinde yapt\u0131\u011f\u0131m\u0131z i\u015flemler her zaman atomik olmayabilir. \u00d6rne\u011fin, bir anahtar\u0131 (key) g\u00fcncellerken \u00f6nce <code>DEL<\/code> komutuyla siliyor, ard\u0131ndan <code>SET<\/code> ile yeni de\u011feri yaz\u0131yorsan\u0131z, bu iki komut aras\u0131nda ge\u00e7en s\u00fcrede Redis&#8217;e ula\u015fan bir &#8220;GET&#8221; iste\u011fi bo\u015f d\u00f6necektir. Bu durum, \u00f6zellikle mikro hizmet (microservices) mimarilerinde ciddi tutars\u0131zl\u0131klara yol a\u00e7ar.<\/p>\n<p>B\u00fcy\u00fck veri setleri s\u00f6z konusu oldu\u011funda risk daha da b\u00fcy\u00fcr. Bir Hash veya Set yap\u0131s\u0131nda binlerce eleman oldu\u011funu d\u00fc\u015f\u00fcn\u00fcn. Bu veriyi do\u011frudan \u00fczerine yazmaya \u00e7al\u0131\u015fmak, Redis&#8217;in o anki i\u015flem kapasitesini kilitleyebilir (blocking). Dolay\u0131s\u0131yla, veriyi arka planda haz\u0131rlay\u0131p, haz\u0131r oldu\u011funda &#8220;anl\u0131k&#8221; bir ge\u00e7i\u015f yapmak hayati \u00f6nem ta\u015f\u0131r. Bu noktada devreye giren Temporary Key Pattern, verinin haz\u0131rlanma s\u00fcreci ile yay\u0131na al\u0131nma s\u00fcrecini birbirinden ay\u0131r\u0131r. B\u00f6ylece kullan\u0131c\u0131lar her zaman ya eski veriyi ya da tamamen g\u00fcncellenmi\u015f yeni veriyi g\u00f6r\u00fcrler; asla &#8220;yokluk&#8221; veya &#8220;yar\u0131m kalm\u0131\u015f veri&#8221; ile kar\u015f\u0131la\u015fmazlar.<\/p>\n<p>Bu stratejiyi uygulamak, sisteminizin dayan\u0131kl\u0131l\u0131\u011f\u0131n\u0131 (resilience) art\u0131r\u0131rken, son kullan\u0131c\u0131 deneyimini de kesintisiz k\u0131lar. \u00d6zellikle e-ticaret sitelerindeki fiyat g\u00fcncellemeleri veya finansal uygulamalardaki d\u00f6viz kurlar\u0131 gibi verinin do\u011frulu\u011funun ve eri\u015filebilirli\u011finin %100 olmas\u0131 gereken durumlarda bu desen bir standart haline gelmi\u015ftir. \u015eimdi bu desenin teknik olarak nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 ad\u0131m ad\u0131m inceleyelim.<\/p>\n<h2>Temporary Key Pattern (Ge\u00e7ici Anahtar Deseni) Nedir?<\/h2>\n<p>Temporary Key Pattern, en temel anlam\u0131yla bir veriyi do\u011frudan hedef anahtar\u0131n \u00fczerine yazmak yerine, \u00f6nce ge\u00e7ici bir anahtarda haz\u0131rlay\u0131p, ard\u0131ndan Redis&#8217;in atomik <code>RENAME<\/code> komutunu kullanarak hedef anahtarla yer de\u011fi\u015ftirmesi i\u015flemidir. Bu y\u00f6ntem, &#8220;Shadow Key&#8221; veya &#8220;Staging Key&#8221; olarak da adland\u0131r\u0131labilir. \u0130\u015flemin g\u00fczelli\u011fi, <code>RENAME<\/code> komutunun Redis taraf\u0131nda atomik olarak ger\u00e7ekle\u015fmesidir. Yani Redis, eski anahtar\u0131 siler ve yenisini ayn\u0131 anda atar; bu s\u0131rada araya ba\u015fka hi\u00e7bir i\u015flem giremez.<\/p>\n<p>Bu desenin temel bile\u015fenleri \u015funlard\u0131r:<\/p>\n<ul>\n<li><strong>Hedef Anahtar (Target Key):<\/strong> Uygulaman\u0131z\u0131n s\u00fcrekli okudu\u011fu anahtar (\u00f6rne\u011fin: <code>products:active<\/code>).<\/li>\n<li><strong>Ge\u00e7ici Anahtar (Temporary Key):<\/strong> Yeni verinin y\u00fcklendi\u011fi haz\u0131rl\u0131k alan\u0131 (\u00f6rne\u011fin: <code>products:active:temp<\/code>).<\/li>\n<li><strong>Atomik De\u011fi\u015fim (Atomic Swap):<\/strong> <code>RENAME<\/code> komutu ile ge\u00e7ici anahtar\u0131n hedef anahtar\u0131n yerini almas\u0131.<\/li>\n<\/ul>\n<p>Bu yakla\u015f\u0131m sayesinde, veri y\u00fckleme s\u00fcreci ne kadar uzun s\u00fcrerse s\u00fcrs\u00fcn (\u00f6rne\u011fin 5 saniye boyunca binlerce <code>HSET<\/code> komutu \u00e7al\u0131\u015ft\u0131r\u0131yor olabilirsiniz), okuma yapan istemciler (clients) bu s\u00fcre\u00e7ten etkilenmez. Onlar hala eski veriyi okumaya devam ederler. Ne zaman ki <code>RENAME<\/code> komutu \u00e7al\u0131\u015f\u0131r, o milisaniyeden sonra gelen t\u00fcm istekler yeni veriyi g\u00f6rmeye ba\u015flar. Bu, &#8220;s\u0131f\u0131r kesinti&#8221; (zero-downtime) felsefesinin Redis d\u00fcnyas\u0131ndaki yans\u0131mas\u0131d\u0131r.<\/p>\n<h3>Ad\u0131m Ad\u0131m Uygulama Rehberi<\/h3>\n<p>Bu deseni uygulamak olduk\u00e7a basittir ancak dikkat edilmesi gereken baz\u0131 p\u00fcf noktalar\u0131 vard\u0131r. Gelin, tipik bir \u00fcr\u00fcn listesi g\u00fcncelleme senaryosu \u00fczerinden ilerleyelim. Varsayal\u0131m ki bir Redis Hash yap\u0131s\u0131nda aktif kampanyal\u0131 \u00fcr\u00fcnleri tutuyoruz.<\/p>\n<p><strong>1. Ad\u0131m: Ge\u00e7ici Anahtar\u0131 Olu\u015fturun<\/strong><br \/>\nDo\u011frudan ana veriyi de\u011fi\u015ftirmek yerine, benzersiz bir ge\u00e7ici anahtar olu\u015fturun. Bu anahtar\u0131n ismine bir zaman damgas\u0131 (timestamp) veya rastgele bir ID eklemek, \u00e7ak\u0131\u015fmalar\u0131 \u00f6nlemek ad\u0131na iyi bir pratiktir.<\/p>\n<div class=\"code-container\">\n<pre><code># Redis CLI \u00fczerinden \u00f6rnek\nHSET products:active:temp product_1 \"Indirimli Telefon\"\nHSET products:active:temp product_2 \"Kablosuz Kulakl\u0131k\"\n# ... binlerce \u00fcr\u00fcn eklenebilir<\/pre>\n<p><\/code>\n<\/div>\n<p><strong>2. Ad\u0131m: Verinin Haz\u0131r Oldu\u011fundan Emin Olun<\/strong><br \/>\nT\u00fcm veriler ge\u00e7ici anahtara yaz\u0131ld\u0131ktan sonra, iste\u011fe ba\u011fl\u0131 olarak bu verinin do\u011frulu\u011funu kontrol eden bir validasyon (do\u011frulama) ad\u0131m\u0131 ekleyebilirsiniz. E\u011fer veri hatal\u0131ysa, ana veriyi hi\u00e7 bozmadan i\u015flemi iptal etme \u015fans\u0131n\u0131z olur.<\/p>\n<p><strong>3. Ad\u0131m: Atomik De\u011fi\u015fimi Ger\u00e7ekle\u015ftirin<\/strong><br \/>\n\u0130\u015fte sihrin ger\u00e7ekle\u015fti\u011fi an. Redis <code>RENAME<\/code> komutu, hedef anahtar zaten varsa onu siler ve ge\u00e7ici anahtar\u0131 hedef anahtar\u0131n ismiyle yeniden adland\u0131r\u0131r.<\/p>\n<div class=\"code-container\">\n<pre><code>RENAME products:active:temp products:active<\/pre>\n<p><\/code>\n<\/div>\n<p>Bu i\u015flemden sonra <code>products:active:temp<\/code> anahtar\u0131 art\u0131k mevcut de\u011fildir ve <code>products:active<\/code> anahtar\u0131 yeni verileri i\u00e7erir. Uygulaman\u0131z\u0131n kod taraf\u0131nda (\u00f6rne\u011fin Node.js veya Python) bu i\u015flem \u015fu \u015fekilde g\u00f6r\u00fcnecektir:<\/p>\n<div class=\"code-container\">\n<pre><code>const updateCache = async (newData) => {\n    const tempKey = \"products:active:temp\";\n    const targetKey = \"products:active\";\n\n    \/\/ 1. Ge\u00e7ici anahtara veriyi yaz\n    for (const item of newData) {\n        await redis.hset(tempKey, item.id, JSON.stringify(item));\n    }\n\n    \/\/ 2. Atomik olarak yer de\u011fi\u015ftir\n    await redis.rename(tempKey, targetKey);\n    console.log(\"G\u00fcncelleme ba\u015far\u0131yla tamamland\u0131.\");\n};<\/pre>\n<p><\/code>\n<\/div>\n<h2>Case Study 1: E-Ticaret Stok ve Fiyat G\u00fcncellemeleri<\/h2>\n<p>T\u00fcrkiye'nin b\u00fcy\u00fck bir e-ticaret platformunda \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131z\u0131 d\u00fc\u015f\u00fcn\u00fcn. \"Efsane Cuma\" indirimleri ba\u015flamak \u00fczere ve 500.000 \u00fcr\u00fcn\u00fcn fiyat\u0131n\u0131 ayn\u0131 anda g\u00fcncellemeniz gerekiyor. Geleneksel y\u00f6ntemle, Redis'teki mevcut anahtarlar\u0131 tek tek g\u00fcncellerseniz (update), g\u00fcncelleme i\u015flemi devam ederken siteye giren kullan\u0131c\u0131lar\u0131n bir k\u0131sm\u0131 eski fiyat\u0131, bir k\u0131sm\u0131 yeni fiyat\u0131 g\u00f6recektir. Daha da k\u00f6t\u00fcs\u00fc, e\u011fer bir hata olu\u015fursa verinin yar\u0131s\u0131 g\u00fcncellenmi\u015f, yar\u0131s\u0131 eski kalm\u0131\u015f olacakt\u0131r (partial update).<\/p>\n<p>Bu senaryoda Temporary Key Pattern kullan\u0131m\u0131 hayat kurtar\u0131c\u0131d\u0131r. Arka planda \u00e7al\u0131\u015fan bir \"Worker\" (i\u015fleyici), ERP sisteminden gelen yeni fiyatlar\u0131 al\u0131r ve <code>prices:staging<\/code> gibi bir ge\u00e7ici anahtara yazar. Bu i\u015flem yakla\u015f\u0131k 2 dakika s\u00fcrebilir. Bu 2 dakika boyunca web sitesindeki kullan\u0131c\u0131lar <code>prices:active<\/code> anahtar\u0131ndan eski ama tutarl\u0131 fiyatlar\u0131 g\u00f6rmeye devam ederler. T\u00fcm fiyatlar ba\u015far\u0131yla <code>staging<\/code> alan\u0131na yaz\u0131ld\u0131\u011f\u0131nda, tek bir <code>RENAME<\/code> komutu ile t\u00fcm site saniyeler i\u00e7inde yeni fiyatlara ge\u00e7er.<\/p>\n<p>Bu y\u00f6ntemin bir di\u011fer avantaj\u0131 ise \"Rollback\" (geri alma) imkan\u0131d\u0131r. E\u011fer yeni fiyatlarda bir tutars\u0131zl\u0131k fark edilirse, eski veriyi bir yedek anahtarda tutarak saniyeler i\u00e7inde geri d\u00f6nebilirsiniz. Bu, y\u00fcksek trafikli sistemlerde hata pay\u0131n\u0131 minimize eder ve veri b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc (data integrity) en \u00fcst seviyeye \u00e7\u0131kar\u0131r.<\/p>\n<h2>Neden SET Yerine RENAME Kullanmal\u0131y\u0131z?<\/h2>\n<p>Bir\u00e7ok geli\u015ftirici \"Neden sadece yeni de\u011feri <code>SET<\/code> komutuyla eskisinin \u00fczerine yazm\u0131yoruz?\" diye sorabilir. E\u011fer veriniz basit bir String ise, <code>SET<\/code> komutu zaten atomiktir ve \u00fczerine yazar. Ancak, veriniz bir Hash, List, Set veya Sorted Set ise durum de\u011fi\u015fir. Bu karma\u015f\u0131k veri yap\u0131lar\u0131n\u0131 tamamen g\u00fcncellemek i\u00e7in \u00f6nce eskilerini silmeniz veya her bir alan\u0131 tek tek g\u00fcncellemeniz gerekir.<\/p>\n<p>A\u015fa\u011f\u0131daki tablo, iki yakla\u015f\u0131m aras\u0131ndaki farklar\u0131 \u00f6zetlemektedir:<\/p>\n<table>\n<thead>\n<tr>\n<th>\u00d6zellik<\/th>\n<th>Do\u011frudan G\u00fcncelleme (Direct Update)<\/th>\n<th>Temporary Key Pattern<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Atomiklik<\/td>\n<td>D\u00fc\u015f\u00fck (\u0130\u015flem s\u0131ras\u0131nda veri de\u011fi\u015febilir)<\/td>\n<td>Y\u00fcksek (RENAME atomiktir)<\/td>\n<\/tr>\n<tr>\n<td>Veri Tutarl\u0131l\u0131\u011f\u0131<\/td>\n<td>Riskli (K\u0131smi g\u00fcncellemeler g\u00f6r\u00fclebilir)<\/td>\n<td>Tam (Ya eski veri ya yeni veri)<\/td>\n<\/tr>\n<tr>\n<td>Performans Etkisi<\/td>\n<td>Y\u00fcksek (Uzun s\u00fcreli kilitlenmeler olabilir)<\/td>\n<td>D\u00fc\u015f\u00fck (Yazma i\u015flemi arka plandad\u0131r)<\/td>\n<\/tr>\n<tr>\n<td>Hata Y\u00f6netimi<\/td>\n<td>Zor (Yar\u0131da kalan i\u015flemler sorun yarat\u0131r)<\/td>\n<td>Kolay (Hata olursa RENAME yap\u0131lmaz)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Tablodan da anla\u015f\u0131laca\u011f\u0131 \u00fczere, Temporary Key Pattern \u00f6zellikle karma\u015f\u0131k veri yap\u0131lar\u0131 ve b\u00fcy\u00fck hacimli g\u00fcncellemeler i\u00e7in \u00e7ok daha g\u00fcvenli bir limand\u0131r. Redis'in <code>RENAME<\/code> komutu O(1) karma\u015f\u0131kl\u0131\u011f\u0131na sahiptir, yani anahtar\u0131n i\u00e7indeki veri ne kadar b\u00fcy\u00fck olursa olsun, isim de\u011fi\u015ftirme i\u015flemi sabit bir s\u00fcrede ger\u00e7ekle\u015fir. Ancak k\u00fc\u00e7\u00fck bir not: E\u011fer hedef anahtar zaten varsa, <code>RENAME<\/code> komutu o anahtar\u0131 siler. \u00c7ok b\u00fcy\u00fck bir anahtar\u0131 silmek (eviction), Redis'i k\u0131sa s\u00fcreli\u011fine bloklayabilir. Bu gibi durumlarda Redis 4.0 ile gelen <code>UNLINK<\/code> mant\u0131\u011f\u0131n\u0131 kullanan sistemler veya arka planda silme i\u015flemleri tercih edilebilir.<\/p>\n<h3>Lua Scriptleri ile S\u00fcreci Daha G\u00fcvenli Hale Getirmek<\/h3>\n<p>Temporary Key Pattern'i bir ad\u0131m \u00f6teye ta\u015f\u0131mak isterseniz, Redis Lua Scripting (betikleme) \u00f6zelli\u011fini kullanabilirsiniz. Lua scriptleri Redis \u00fczerinde tek bir komut gibi \u00e7al\u0131\u015f\u0131r ve tamamen atomiktir. Bu sayede, \"E\u011fer ge\u00e7ici anahtar varsa ve i\u00e7eri\u011fi ge\u00e7erliyse yer de\u011fi\u015ftir\" gibi mant\u0131ksal kontrolleri Redis taraf\u0131nda yapabilirsiniz.<\/p>\n<p>\u00d6rne\u011fin, bir Lua scripti ile hem yer de\u011fi\u015ftirme yap\u0131p hem de eski veriyi bir log anahtar\u0131na ta\u015f\u0131yabilirsiniz:<\/p>\n<div class=\"code-container\">\n<pre><code>local tempKey = KEYS[1]\nlocal targetKey = KEYS[2]\nlocal backupKey = KEYS[3]\n\n-- Eski veriyi yedekle\nif redis.call(\"EXISTS\", targetKey) == 1 then\n    redis.call(\"RENAME\", targetKey, backupKey)\nend\n\n-- Yeni veriyi yay\u0131na al\nreturn redis.call(\"RENAME\", tempKey, targetKey)<\/pre>\n<p><\/code>\n<\/div>\n<p>Bu script, veri ge\u00e7i\u015fi s\u0131ras\u0131nda olu\u015fabilecek her t\u00fcrl\u00fc kesintiyi engellerken, bir yandan da hata durumunda geri d\u00f6nebilece\u011finiz bir yedek (backup) olu\u015fturur. Uygulama sunucusu ile Redis aras\u0131ndaki a\u011f gecikmelerinden (network latency) etkilenmeden t\u00fcm mant\u0131k Redis i\u00e7inde ko\u015fturulur.<\/p>\n<h2>Bellek Y\u00f6netimi ve Temizlik Stratejileri<\/h2>\n<p>Temporary Key Pattern kullan\u0131rken en \u00e7ok g\u00f6z ard\u0131 edilen konu bellek (RAM) kullan\u0131m\u0131d\u0131r. G\u00fcncelleme i\u015flemi s\u0131ras\u0131nda, hem eski veri hem de yeni veri ayn\u0131 anda Redis belle\u011finde bulunur. E\u011fer Redis sunucunuzun bellek doluluk oran\u0131 %70-80 civar\u0131ndaysa, b\u00fcy\u00fck bir anahtar\u0131 kopyalamaya \u00e7al\u0131\u015fmak \"Out of Memory\" (Bellek Yetersiz) hatalar\u0131na yol a\u00e7abilir.<\/p>\n<p>Bunu y\u00f6netmek i\u00e7in \u015fu stratejileri izleyebilirsiniz:<\/p>\n<ul>\n<li><strong>TTL Kullan\u0131m\u0131:<\/strong> Ge\u00e7ici anahtarlar\u0131n\u0131za her zaman k\u0131sa bir TTL (Time-To-Live \/ Ya\u015fam S\u00fcresi) atay\u0131n. E\u011fer g\u00fcncelleme i\u015flemi bir \u015fekilde yar\u0131da kal\u0131rsa, ge\u00e7ici anahtarlar bellekte sonsuza kadar yer kaplamaz.<\/li>\n<li><strong>Bellek \u0130zleme:<\/strong> G\u00fcncelleme i\u015flemini ba\u015flatmadan \u00f6nce <code>INFO memory<\/code> komutu ile kullan\u0131labilir alan\u0131 kontrol edin.<\/li>\n<li><strong>Par\u00e7al\u0131 G\u00fcncelleme:<\/strong> E\u011fer veri \u00e7ok devasaysa, t\u00fcm anahtar\u0131 bir kerede de\u011fi\u015ftirmek yerine, veriyi mant\u0131ksal par\u00e7alara (shards) b\u00f6lerek bu deseni her par\u00e7a i\u00e7in ayr\u0131 ayr\u0131 uygulay\u0131n.<\/li>\n<\/ul>\n<p>Ayr\u0131ca, <code>RENAME<\/code> i\u015flemi sonras\u0131nda eski verinin bellekten hemen silinmesi gerekti\u011fini unutmay\u0131n. E\u011fer hedef anahtar \u00e7ok b\u00fcy\u00fckse, Redis'in <code>lazyfree-lazy-server-del<\/code> konfig\u00fcrasyonunun a\u00e7\u0131k olmas\u0131, silme i\u015fleminin arka planda yap\u0131lmas\u0131n\u0131 sa\u011flayarak ana thread'in kilitlenmesini \u00f6nler.<\/p>\n<h2>\u0130leri D\u00fczey \u0130pu\u00e7lar\u0131 ve P\u00fcf Noktalar\u0131<\/h2>\n<p>Deneyimli bir sistem mimar\u0131 i\u00e7in Temporary Key Pattern sadece bir ba\u015flang\u0131\u00e7t\u0131r. Bu deseni daha verimli kullanmak i\u00e7in \u015fu ipu\u00e7lar\u0131n\u0131 de\u011ferlendirebilirsiniz:<\/p>\n<p><strong>1. Versioning (S\u00fcr\u00fcmleme):<\/strong> Anahtar isimlerinize s\u00fcr\u00fcm numaras\u0131 ekleyin (\u00f6rne\u011fin: <code>catalog:v1<\/code>, <code>catalog:v2<\/code>). Uygulaman\u0131z hangi s\u00fcr\u00fcm\u00fcn aktif oldu\u011funu ba\u015fka bir anahtardan (meta-key) okusun. G\u00fcncelleme bitti\u011finde sadece s\u00fcr\u00fcm numaras\u0131n\u0131 g\u00fcncelleyin. Bu, atomik ge\u00e7i\u015fin en temiz yollar\u0131ndan biridir.<\/p>\n<p><strong>2. RENAMENX Kullan\u0131m\u0131:<\/strong> E\u011fer hedef anahtar\u0131n yanl\u0131\u015fl\u0131kla \u00fczerine yazmak istemiyorsan\u0131z <code>RENAMENX<\/code> komutunu kullan\u0131n. Bu komut, sadece hedef anahtar mevcut de\u011filse isimlendirme yapar. Ancak bu desenin amac\u0131 genellikle \u00fczerine yazmak oldu\u011fu i\u00e7in <code>RENAME<\/code> daha yayg\u0131nd\u0131r.<\/p>\n<p><strong>3. Pipeline Kullan\u0131m\u0131:<\/strong> Ge\u00e7ici anahtara veri yazarken <code>PIPELINE<\/code> kullanarak a\u011f trafi\u011fini azalt\u0131n. Binlerce <code>HSET<\/code> komutunu tek tek g\u00f6ndermek yerine, gruplar halinde g\u00f6ndermek g\u00fcncelleme s\u00fcresini 10 kata kadar h\u0131zland\u0131rabilir.<\/p>\n<p>Sonu\u00e7 olarak, Temporary Key Pattern bir \"m\u00fchendislik zekas\u0131\" \u00f6rne\u011fidir. Karma\u015f\u0131k sorunlar\u0131, Redis'in sundu\u011fu basit ve g\u00fc\u00e7l\u00fc komutlar\u0131 do\u011fru kombinasyonla kullanarak \u00e7\u00f6zer. Bu deseni bir kez sisteminize entegre etti\u011finizde, veri g\u00fcncellemeleri nedeniyle ya\u015fad\u0131\u011f\u0131n\u0131z stresli anlar\u0131n yerini g\u00fcvenli ve sessiz bir s\u00fcre\u00e7 alacakt\u0131r.<\/p>\n<h2>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular<\/h2>\n<p>Redis'te Temporary Key Pattern kullan\u0131m\u0131, modern ve \u00f6l\u00e7eklenebilir uygulamalar\u0131n vazge\u00e7ilmez bir par\u00e7as\u0131d\u0131r. Veri tutarl\u0131l\u0131\u011f\u0131n\u0131 garanti alt\u0131na al\u0131rken, sistem performans\u0131ndan \u00f6d\u00fcn vermemenizi sa\u011flar. Bu makalede \u00f6\u011frendi\u011fimiz gibi, atomik bir <code>RENAME<\/code> operasyonu, karma\u015f\u0131k veri y\u00fckleme s\u00fcre\u00e7lerini kullan\u0131c\u0131ya hissettirmeden tamamlaman\u0131n anahtar\u0131d\u0131r.<\/p>\n<p>A\u015fa\u011f\u0131da konuyla ilgili en \u00e7ok merak edilen sorular\u0131 ve cevaplar\u0131n\u0131 bulabilirsiniz:<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular<\/h3>\n<ol>\n<li><strong>RENAME komutu \u00e7ok b\u00fcy\u00fck verilerde sistemi kilitler mi?<\/strong><br \/>\n    <code>RENAME<\/code> komutunun kendisi O(1) yani \u00e7ok h\u0131zl\u0131d\u0131r. Ancak, e\u011fer hedef anahtar\u0131n \u00fczerine yaz\u0131l\u0131yorsa ve hedef anahtar \u00e7ok b\u00fcy\u00fckse (\u00f6rne\u011fin 1 GB'l\u0131k bir Hash), Redis o eski veriyi silmek i\u00e7in zaman harcayabilir. Redis 4.0+ kullan\u0131yorsan\u0131z arka planda silme \u00f6zelliklerini aktif ederek bu riski minimize edebilirsiniz.<\/li>\n<li><strong>Bu y\u00f6ntemi t\u00fcm Redis veri tipleri i\u00e7in kullanabilir miyim?<\/strong><br \/>\n    Evet. String, Hash, List, Set, Sorted Set ve hatta Stream yap\u0131lar\u0131 i\u00e7in bu y\u00f6ntem g\u00fcvenle kullan\u0131labilir. \u00d6nemli olan verinin ge\u00e7ici bir isimle haz\u0131rlan\u0131p sonra as\u0131l ismine kavu\u015fmas\u0131d\u0131r.<\/li>\n<li><strong>Ge\u00e7ici anahtar olu\u015ftururken nelere dikkat etmeliyim?<\/strong><br \/>\n    Ge\u00e7ici anahtar\u0131n benzersiz (unique) olmas\u0131 kritiktir. \u00d6zellikle birden fazla worker'\u0131n ayn\u0131 anda g\u00fcncelleme yapma ihtimali varsa, anahtar ismine <code>UUID<\/code> veya <code>process_id<\/code> eklemek \u00e7ak\u0131\u015fmalar\u0131 \u00f6nler.<\/li>\n<li><strong>Bellek kullan\u0131m\u0131 iki kat\u0131na \u00e7\u0131kar m\u0131?<\/strong><br \/>\n    Evet, g\u00fcncelleme s\u00fcreci boyunca hem eski veri hem de yeni veri bellekte yer kaplar. Bu y\u00fczden bellek limitlerinizi (maxmemory) bu durumu g\u00f6zeterek yap\u0131land\u0131rmal\u0131s\u0131n\u0131z.<\/li>\n<li><strong>\u0130\u015flem s\u0131ras\u0131nda elektrik kesilirse veya Redis kapan\u0131rsa ne olur?<\/strong><br \/>\n    Redis'in kal\u0131c\u0131l\u0131k (persistence) ayarlar\u0131na (RDB\/AOF) ba\u011fl\u0131 olarak verileriniz korunur. Ancak <code>RENAME<\/code> i\u015flemi atomik oldu\u011fu i\u00e7in ya tam ger\u00e7ekle\u015fmi\u015ftir ya da hi\u00e7 ger\u00e7ekle\u015fmemi\u015ftir. Yar\u0131m kalm\u0131\u015f bir anahtar ismiyle kar\u015f\u0131la\u015fmazs\u0131n\u0131z.<\/li>\n<\/ol>\n<p>#Redis #Backend #WebDevelopment #Caching #SoftwareArchitecture<\/p>\n","protected":false},"excerpt":{"rendered":"Redis \u00fczerinde b\u00fcy\u00fck veri setlerini g\u00fcncellerken kesinti ya\u015famadan ve atomik bir \u015fekilde i\u015flem yapman\u0131z\u0131 sa\u011flayan Temporary Key Pattern (Ge\u00e7ici Anahtar Deseni) y\u00f6ntemini ke\u015ffedin.","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-41504","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 Kesintisiz Veri G\u00fcncelleme: Temporary Key Pattern Rehberi - 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-kesintisiz-veri-guncelleme-temporary-key-pattern-rehberi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Redis&#039;te Kesintisiz Veri G\u00fcncelleme: Temporary Key Pattern Rehberi\" \/>\n<meta property=\"og:description\" content=\"Redis \u00fczerinde b\u00fcy\u00fck veri setlerini g\u00fcncellerken kesinti ya\u015famadan ve atomik bir \u015fekilde i\u015flem yapman\u0131z\u0131 sa\u011flayan Temporary Key Pattern (Ge\u00e7ici Anahtar Deseni) y\u00f6ntemini ke\u015ffedin.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/rediste-kesintisiz-veri-guncelleme-temporary-key-pattern-rehberi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-04-29T18:04:23+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=\"13 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/rediste-kesintisiz-veri-guncelleme-temporary-key-pattern-rehberi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/rediste-kesintisiz-veri-guncelleme-temporary-key-pattern-rehberi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Redis&#8217;te Kesintisiz Veri G\u00fcncelleme: Temporary Key Pattern Rehberi\",\"datePublished\":\"2026-04-29T18:04:23+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/rediste-kesintisiz-veri-guncelleme-temporary-key-pattern-rehberi\/\"},\"wordCount\":2356,\"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-kesintisiz-veri-guncelleme-temporary-key-pattern-rehberi\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/rediste-kesintisiz-veri-guncelleme-temporary-key-pattern-rehberi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/rediste-kesintisiz-veri-guncelleme-temporary-key-pattern-rehberi\/\",\"name\":\"Redis'te Kesintisiz Veri G\u00fcncelleme: Temporary Key Pattern Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-04-29T18:04:23+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/rediste-kesintisiz-veri-guncelleme-temporary-key-pattern-rehberi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/rediste-kesintisiz-veri-guncelleme-temporary-key-pattern-rehberi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/rediste-kesintisiz-veri-guncelleme-temporary-key-pattern-rehberi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Redis&#8217;te Kesintisiz Veri G\u00fcncelleme: Temporary Key Pattern Rehberi\"}]},{\"@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 Kesintisiz Veri G\u00fcncelleme: Temporary Key Pattern Rehberi - 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-kesintisiz-veri-guncelleme-temporary-key-pattern-rehberi\/","og_locale":"tr_TR","og_type":"article","og_title":"Redis'te Kesintisiz Veri G\u00fcncelleme: Temporary Key Pattern Rehberi","og_description":"Redis \u00fczerinde b\u00fcy\u00fck veri setlerini g\u00fcncellerken kesinti ya\u015famadan ve atomik bir \u015fekilde i\u015flem yapman\u0131z\u0131 sa\u011flayan Temporary Key Pattern (Ge\u00e7ici Anahtar Deseni) y\u00f6ntemini ke\u015ffedin.","og_url":"https:\/\/fatihsoysal.com\/blog\/rediste-kesintisiz-veri-guncelleme-temporary-key-pattern-rehberi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-04-29T18:04:23+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"13 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/rediste-kesintisiz-veri-guncelleme-temporary-key-pattern-rehberi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/rediste-kesintisiz-veri-guncelleme-temporary-key-pattern-rehberi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Redis&#8217;te Kesintisiz Veri G\u00fcncelleme: Temporary Key Pattern Rehberi","datePublished":"2026-04-29T18:04:23+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/rediste-kesintisiz-veri-guncelleme-temporary-key-pattern-rehberi\/"},"wordCount":2356,"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-kesintisiz-veri-guncelleme-temporary-key-pattern-rehberi\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/rediste-kesintisiz-veri-guncelleme-temporary-key-pattern-rehberi\/","url":"https:\/\/fatihsoysal.com\/blog\/rediste-kesintisiz-veri-guncelleme-temporary-key-pattern-rehberi\/","name":"Redis'te Kesintisiz Veri G\u00fcncelleme: Temporary Key Pattern Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-04-29T18:04:23+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/rediste-kesintisiz-veri-guncelleme-temporary-key-pattern-rehberi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/rediste-kesintisiz-veri-guncelleme-temporary-key-pattern-rehberi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/rediste-kesintisiz-veri-guncelleme-temporary-key-pattern-rehberi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Redis&#8217;te Kesintisiz Veri G\u00fcncelleme: Temporary Key Pattern Rehberi"}]},{"@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\/41504","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=41504"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/41504\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=41504"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=41504"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=41504"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}