EN · ORIGINAL REPOSITORY DOCUMENT
Architecture decisions
Original English text. Commands and evidence apply to the revision and environment stated in the document.
REFACTOR-DECISIONS.md
On this page
Davranış değişikliği için inceleme notu
Durum (2026-10-04): Kullanıcının iki davranış değişikliği için verdiği “tamam yap” onayıyla 1. ve 2. maddeler kaynak koda uygulandı. Kullanıcının daha sonra verdiği PHP testi izniyle 37 yerel regresyon senaryosu ve 148 PHPUnit doğrulaması geçti. Ardından ayrıca onaylanan gerçek WordPress/WooCommerce/Redis ortamında altı entegrasyon betiği ve yaşam döngüsü paketi geçti; ilk çalıştırmada atlanan WordPress senaryosu da doğrulandı. Cluster/Sentinel/TLS/Relay, kapsamlı eşzamanlılık ve performans kabulü hâlâ açık. 3. madde öneri olarak bekliyor; uygulanmadı. 4. madde kullanıcı tarafından ayrıca onaylandı ve kaynak koda uygulandı; bu yeni değişikliğin testleri geliştirme sonuna ertelendi. Kullanıcının bu sohbette paylaştığı AGENTS.md, onaylı planda açıkça bulunmayan yöntem ve iş akışı değişiklikleri öncesinde açık onay istiyor.
1. Kalıcı sayaçlar
Önceki yol: GET → PHP aritmetiği → SET KEEPTTL. İki süreç aynı eski değerden hesaplayabilir. SET false döndüğünde de hesaplanan sayı dönüyor; counters.php bu eski davranışı bekliyordu; beklenti yeni sözleşmeye göre güncellendi.
Uygulanan yol: mevcut TransactionalConnectionInterface üzerinden aynı ana bağlantıda WATCH → GET/TTL → mevcut increment/decrement aritmetiği → MULTI/EXEC. Çakışmada veya yazma hatasında otomatik tekrar yapılmaz; false döner ve ilgili bellek kaydı geçersizleştirilir. Yalnız başarılı EXEC sonrası yeni sayı belleğe yazılır. Eksik kayıt yaratılmaz. PHP serileştirmesi, özel aritmetik metotları, negatif offset, sıfıra sabitleme ve kalıcı olmayan grup davranışı korunur. Redis 6+ için tek SET XX KEEPTTL kuyruğa alınır. Redis sürümü aynı fiziksel bağlantıdan INFO ile alınır ve bağlantı nesnesinde saklanır. Eski sunucularda WATCH altında PTTL okunur; geçen yerel süre düşülerek tek SET XX PX yazılır. Süresiz kayıt yine süresizdir; eksik/süresi dolmuş kayıt yazılmaz. Bu eski sürüm yolunda bağıl PX, kuyruk/ağ gecikmesi nedeniyle bitiş anını tam koruma garantisi vermez; sonlu TTL’nin süresiz hale gelmesini önler. INFO/PTTL erişimi veya geçerli yanıt sağlanamazsa işlem false döner. Hatalı SET’ten sonra koşulsuz SET yoktur.
Etkisi: ek Redis komutları; yoğun çakışmada bazı çağrılar false döner. Başarısız yazmada sayı dönmesini bekleyen mevcut regresyon sözleşmesi değişir. Performans ölçümü yapılmadan hız artışı iddia edilmez.
Mevcut yöntemi koruyan seçenek: yalnız hata/bellek davranışını düzeltip iki komutlu GET/SET yolunu korumak. Bu seçenek eşzamanlı güncelleme kaybını gidermez.
2. Sentinel normal yazmalarının tekrarı
Önceki yol: herhangi bir komut hatasından sonra ana bağlantı yeniden keşfedilir ve aynı komut tekrar gönderilir. Cevabı kaybolan SET NX gerçekte gerçekleşmiş olabilir; tekrarın sonucu bu ilk yazmanın sonucu sayılamaz.
Uygulanan davranış: mevcut salt-okunur komut listesine giren okumalar için tekrar davranışı korunur. Yazmalar ve bilinmeyen/raw komutlar sonucu belirsiz kaldığında tekrar gönderilmez; keşif sonraki çağrı için bağlantıyı hazırlar, ilk hata çağırana aktarılır. Yazmanın ilk gönderiminde native client tekrarları da devre dışı bırakılır ve sonrasında önceki ayar geri yüklenir. Onaylı transaction yolu değişmez. Ağ kesintisinde yazma başarı oranı düşebilir; eski otomatik yazma kurtarmasına güvenen kullanıcılar için gözlemlenebilir davranış değişikliğidir. Yeniden keşif de başarısız olursa ilk yazma hatası korunur. Native tekrar ayarını geri yüklemek başarısız olursa bağlantı kapatılır. Sonucu belirsiz yazmada false/hata dönmesi, Redis’te hiç değişiklik olmadığını kanıtlamaz.
Mevcut yöntemi koruyan seçenek: yalnız hatanın/tekrarın ölçümünü doğru raporlamak; belirsiz yazma tekrarı riski devam eder.
3. Yönetim ekranında grup listeleme
Mevcut yol: tek REST isteğinde bütün anahtarlar ve istenirse her anahtarın MEMORY USAGE sonucu taranıyor. Yeni temizlik önizlemesindeki bütçe bu yolu kapsamıyor.
Öneri: mevcut tam listeleme API’si korunur; yönetim ekranı isteğe bağlı devam imleçli taramayı kullanır. Her yanıt en fazla 20 SCAN, 2.000 işlenen anahtar ve 150 ms yumuşak bütçeyle ilerleme döndürür. Devam imleci kullanıcı/site/prefix kapsamına bağlanır; geçersiz ya da topolojisi değişmiş imleç reddedilir. Ekran, tamamlanmamış sayıları kısmi olarak gösterir; iptal düğmesi yeni istekleri durdurur. Mevcut grafik kütüphanesi ve JavaScript kullanılır; framework/arka plan servisi eklenmez. Bir Redis komutunun süresi yine bağlantı timeout’u ile sınırlıdır. SCAN sırasında eşzamanlı değişiklikler kesin anlık toplam garantisi sağlamaz.
Mevcut yöntemi koruyan seçenek: tam tarama devam eder; yalnız hata yanıtları ve uzun sürebileceğini belirten açıklama iyileştirilir. Tek isteğin toplam süresi sınırlanmaz.
4. Stampede korumasının uygulama sözleşmesi — onaylandı, kaynak kod uygulandı
Kullanıcı seçimi (2026-10-04): “Ayrı ocp_remember API’sini uygula (önerilen)”.
Mevcut wp_cache_remember($key, $expire, Closure $callback, $group = '')
GET → callback → SET yolunu kullanıyor. Aynı kayıt eksikse birden fazla süreç
callback’i çalıştırabilir. wp_cache_sear() aynı yardımcıyı çağırır. TTL jitter
bu eşzamanlı hesaplamayı engellemez. Mevcut yardımcıdaki saklanan false değerini
miss sanma hatası, normal $found sözleşmesi kullanılarak ayrıca düzeltiliyor;
bu düzeltme bir kilit veya bekleme eklemiyor.
Onaylanan seçim: mevcut yardımcıları kilit/bekleme açısından değiştirmeden, plandaki
ocp_remember() API’sini isteğe bağlı kullanım için eklemek. Aynı key/group ve
WordPress string anahtar davranışı, v2 site/global kapsamı, serileştirme, TTL
üst sınırları ve jitter korunur. Yeni çağrıyı kullanmayan kod için otomatik bir
callback üretimi veya eski veriye dönüş eklenmez. Etiket API’si ayrı plan adımıdır;
bu karar yalnız stampede ve hesaplanan değerin güvenli yayımlanmasını kapsar.
Onaylanan sözleşme:
- Başlangıçta normal cache okuması;
falsevenulldahil bulunan değerlerde callback çalışmaz. Kalıcı olmayan gruplar mevcut istek belleğini kullanır. - Kalıcı miss için aynı Cluster slotundaki yardımcı anahtarda rastgele sahiplik token’ı ve süreli kira. Önerilen varsayılan kira 10 saniye, bekleme bütçesi 100 ms; çağıran sınırlı seçeneklerle bunları ayarlayabilir. Bekleme toplam işlem süresi garantisi değildir: tek Redis komutunun bağlantı timeout’u ayrıca geçerlidir. Ana bağlantı kullanılır; Relay yerel değeri sahiplik kanıtı sayılmaz.
- Rakip süreç sonucu beklerken sınırlı aralıklarla ana bağlantıdan yeniden okuma; callback Redis transaction’ı dışında çalışır. Callback’in kendi cache çağrıları normal şekilde kullanılabilir. Bir çağrıda callback en çok bir kez çalıştırılır.
- Sahiplik kontrolü ve yayın WATCH/MULTI/EXEC ile aynı ana bağlantıda yapılır. Kira bitmişse, geçersizleştirme olmuşsa veya başka değer yazılmışsa hesaplanan sonuç paylaşımlı cache’e yayımlanmaz. Başkasının kirası kaldırılmaz. EXEC hatası geri alma garantisi sayılmaz ve belirsiz yazma otomatik tekrarlanmaz.
- Bunun doğru olması için koruma etkin kapsamda yazma/silme, sayaç ve grup
geçersizleştirme yolları devam eden hesabı da geçersizleştirmelidir. Yalnız
SET NXile kilit alıp sonunda koşulsuz SET yapmak yeterli değildir. Bu entegrasyon, mevcut mutasyonlara ek Redis komutları getirebilir; publicwp_cache_*imzaları ve veri biçimi korunur. - Bekleme bütçesi dolarsa veya Redis güvenilir cevap vermezse callback sonucu yalnız çağırana döner; sahiplik olmadan cache’e yazılmaz. Callback istisnası aynen yayılır. Temizlik hatası ilk hatayı gizlemez. Bu, süreç çökmesi/failover sırasında uygulama yan etkilerini tam bir kez çalıştırma garantisi değildir; callback tekrar çalıştırılabilir bir veri hesaplaması olmalıdır.
Etkisi: opt-in çağrılarda ek ana bağlantı okumaları, kiralar, koşullu işlemler ve sınırlı bekleme; etkin kapsamın geçersizleştirme maliyeti de artar. Gerçek eşzamanlılık/kesinti ve beş tekrarlı performans karşılaştırması final test aşamasına kalır; ölçüm öncesinde hız artışı iddiası yoktur.
Mevcut yöntemi koruyan seçenek: wp_cache_remember()/wp_cache_sear() ile devam
etmek; yalnız $found hatası düzelir ve TTL jitter kullanılabilir. Eşzamanlı
miss’lerde birden çok hesaplama devam eder. Diğer seçenek, korumayı bu mevcut
yardımcılara da varsayılanı kapalı bir ayarla bağlamaktır; bu onların bekleme ve
yazma akışını değiştirir ve ayrıca açık seçim gerektirir.
Uygulama: stampede_groups varsayılanı boş; koruma yalnız seçilen kalıcı gruplarda.
Aynı prefix’i kullanan bütün web/cron/CLI süreçleri aynı ayarı kullanmalıdır.
Kira 10.000 ms, bekleme 100 ms, sorgulama aralığı 5 ms; seçenekler sınırlı ve
en fazla 200 edinme/okuma girişimi var. Desteklenen WATCH sona-erme davranışı için
bu isteğe bağlı yol Redis 6.0.9+ ve ana bağlantıda INFO erişimi arar; yoksa hesap
yalnız çağırana döner. Kira iptali önce ayrı bir transaction ile doğrulanır,
ardından veri mutasyonu kiranın hâlâ bulunmadığı WATCH ile yapılır. Böylece
aynı EXEC içinde başarısız DEL sonrasında başarılı SET varsayılmaz. Etkin grubun
toplu işlemleri anahtar başına korumalı işlemleri kullanır. Grup/site/ad alanı
temizliği ve sorgu budaması önce kira taraması, sonra mevcut veri taramasını yapar.
Başlayan yeni işlemler bakım boyunca global olarak durdurulmaz; SCAN atomik değildir.
Kod/sözdizimi testleri dahil çalışma zamanı doğrulaması yapılmadı. Ayrıntılı kullanım,
kısmi EXEC ve dağıtım sınırları ile final test kapıları STAMPEDE.md
dosyasındadır. Bu onay 3. maddedeki listeleme değişikliğini kapsamıyor.
5. Cache Insights saatlik veri sınırı — onaylandı, kaynak kod uygulandı
Kullanıcı seçimi: “Saatlik sınır ve WATCH yöntemini uygula (önerilen)”. Kaynak uygulama 2026-10-05; testler geliştirme sonundaki aşamada kalıyor.
Onaylı atak planı istek başına 64 bileşen/grup çifti ve taşan kayıtları other
altında toplama sınırı içeriyor. İstek sonunda tek pipeline ile HINCRBY/EXPIRE,
raporda ise bütün saatlerin tek HGETALL pipeline’ıyla okunmasını tarif ediyor.
Bu sınır, farklı isteklerin sürekli yeni grup adları üretmesi durumunda Redis’teki
bir saatlik hash’in veya yedi günlük rapor belleğinin büyümesini sınırlamıyor.
Önerilen ek sözleşme: her site/saat için en fazla 256 adlandırılmış çift ve bir
other çifti. Mevcut ana bağlantıyı yakalayan WATCH/MULTI/EXEC arayüzünde üyelik
ve alan sayısı okunur; kabul edilen çiftlerin sayaçları ve sekiz günlük TTL aynı
EXEC’e alınır. Çakışan veya sonucu belirsiz örnek yeniden gönderilmez; o örneğin
rapora girmemesi kabul edilir. EXEC’in hata halinde geri alma garantisi yoktur;
hasarlı biçim veya sınır aşımı görülürse yeni yazma reddedilir. Saklanan veri
cache anahtarı/değeri değil, bileşen/grup bazında sayısal örneklem sayaçlarıdır.
Rapor en fazla dört saatin hash’ini aynı pipeline’da okur; toplam birleştirme
belleğinde en fazla 1.024 adlandırılmış çift ve bir other çifti tutar. Taşma ve
örnekleme raporda açıkça gösterilir; veriler bütün trafiğin kesin toplamı veya
kesin yavaşlık sıralaması olarak sunulmaz. Site kapsamı, yerel Redis’te saklama,
sekiz günlük tutma ve mevcut ApexCharts/REST/CLI teknolojileri korunur.
Etkisi: örneklenen isteklerin kapanışında ek ana bağlantı okumaları, WATCH ve EXEC; yüksek çekişmede örnek kaybı. Rapor okumaları daha fazla ağ turu yapar ama aynı anda çözümlenen Redis yanıtı sınırlanır. Sayısal sayaç taşması, yanlış veri türü veya kısmi EXEC hatası başarılı kayıt sayılmaz. Cache veri işlemleri Insights kaydı başarısız olduğunda tekrar çalıştırılmaz veya başarısız sayılmaz.
Mevcut yöntemi koruyan seçenek: plandaki tek pipeline yolunu aynen uygulamak; istek içi sınır korunur, fakat saatlik toplam alan sayısı ve rapor yanıtının belleği için kesin üst sınır verilemez. Kullanıcı sınırlı WATCH yolunu seçti. İstek içi örnekleme/atıf, sınırlı saklama/rapor, REST, CLI ve mevcut grafik kütüphanesini kullanan yönetim ekranı kaynak koda eklendi. Byte metriği tekrar serileştirme yapmadan sınırlı mantıksal girdi boyutunu ve ölçüm kapsamını bildirir; ağ trafiği byte’ı olarak sunulmaz. Kısmi EXEC, TTL komutu hatası, flush ile geçmiş kaybı ve final test koşulları CACHE-INSIGHTS.md içinde açıkça belgelenmiştir.
6. Anlık HTTP profili — onaylandı ve kaynak koda uygulandı
Atak planı wp redis profile <url> ile tek isteğin %100 örneklenmesini ve
bileşen/grup bazında çağrı, süre ve boyut dökümünü istiyor. Mevcut Insights,
istek içi sayaçları ve saatlik örneklem raporunu içeriyor; başka bir HTTP isteğini
yetkilendirip anlık çağrı listesini CLI’a taşıyan yol bu adımda eklendi.
Onaylanan yöntem: CLI, mevcut WordPress sitesinin origin ve yol kapsamındaki bir URL için tek kullanımlık, kısa ömürlü imzalı profil bileti oluşturur. İmza, erken bootstrap’ta erişilebilen WordPress AUTH_KEY/AUTH_SALT sırlarından türetilir; geçerli sırlar yoksa komut açıklayıcı hata verir. Yeni harici servis, kütüphane, global profil ayarı veya herkese açık rapor okuma endpoint’i eklenmez.
- CLI bir gerçek anonim GET gönderir; kullanıcı cookie’leri ve oturum açma yetkileri taşınmaz. Yönlendirme veya başarısız istek otomatik tekrarlanmaz. HTTPS sertifika denetimi korunur. URL site kapsamı sunucuda da doğrulanır; bilet başka URL/site/prefix için kullanılamaz.
- İmzalı bilet beş dakikalıktır. Mevcut yakalanmış ana bağlantı ve WATCH yolu biletin tek kullanımını doğrular. İmzalanmamış profil başlıkları yeni bir Redis okuması veya %100 toplama başlatmaz. Profilin tüketilmesi/yayımlanması belirsiz kalırsa tekrar yapılmaz.
- Sadece biletin yetkilendirdiği istek %100 örneklenir. Normal HTTP cevabına tanı verisi eklenmez. Çağrı listesi ve özet, ayrı süreli yardımcı Redis kaydında tutulur; CLI sonucu okuyup kendi geçici kayıtlarını temizler. Zorlanmış örnek, normal saatlik Insights örneklemine karıştırılmaz.
- Varsayılan en fazla 2.000 çağrı olayı; seçenekle en fazla 10.000. Ayrıca olay verisi için 2 MiB sınır. Fazlalık sessizce tamamlanmış sayılmaz: atlanan çağrılar ve kısmi rapor durumu gösterilir. Toplu API çağrısı bir olaydır; iç backend yardımcıları ikinci kez sayılmaz. Çağrı başına süre ve mevcut mantıksal boyut/ölçüm kapsamı kaydedilir; ham anahtar, değer, parola, URL sorgu parametreleri, cookie ve bilet sırrı rapora alınmaz.
- GET gerçek WordPress/tema/eklenti kodunu çalıştırır; bu kodun normal yan etkileri devam eder. Profil isteği soğuk cache veya tam sayfa cache bypass’ı dayatmaz. CDN/sayfa cache PHP’yi çalıştırmazsa veya header’ı geçirmezse komut profil alınamadığını söyler; bunu sıfır maliyet diye raporlamaz.
Etkisi: yalnız açık profil çağrısında ek HTTP isteği, yetkilendirme ve geçici
Redis kayıtları; ölçülen istekte %100 izleme maliyeti. Kaydedilen API süreleri
ile HTTP toplam süresi ayrı gösterilir; normal trafiğin p95 ölçümü sayılmaz.
Önceki wp_cache_* imzaları, günlük örnekleme ayarı, Redis topolojileri ve
WordPress’in HTTP davranışı korunur. Gerçek ortam/kimlik doğrulama/çoklu süreç
ve performans testleri geliştirme sonundaki aşamada yapılır.
Kullanıcı “Gerçek HTTP profil yöntemini uygula” seçeneğini onayladı. Kaynak uygulama, CLI komutu, erken drop-in bağlantısı, süreli/imzalı Redis raporu ve sınırlı olay/boyut toplayıcısını içeriyor. HTTP gövdesi bellekte tutulmadan geçici dosyaya aktarılıp işlem sonunda temizlenir; temizlik sonucu raporlanır. Kapsam, geç kapanış, failover, boyut ölçümü ve son test koşulları HTTP-PROFILE.md içindedir. Bu adımda PHP/HTTP/entegrasyon testi çalıştırılmadı.
Mevcut yaklaşımı koruyan seçenek: mevcut wp redis insights ile saatlik örneklem
raporunu kullanmaya devam etmek; bu anlık URL profilini sağlamaz. URL’yi yalnız
CLI içinde WordPress çağrısıyla benzetmek daha az altyapı gerektirir, fakat HTTP
ve web sunucusu koşullarını ölçmediğinden onaylı planın eşdeğeri olarak sunulmaz.
7. Anahtar patlaması dedektörü — yöntem onaylandı
İncelenen mevcut yaklaşım: Insights, bileşen/grup başına işlem sayaçları tutuyor; anahtar kimliği/deseni veya farklı anahtar sayısı toplamıyor. CleanupPreview, scanBatches() ile sınırlı bir örnek döndürüyor; tam taramanın tamamlandığını bildirmiyor. Bu nedenle mevcut veriden canlı anahtar büyümesi veya desene bağlı yazıcı atfı çıkarılamaz. Yüksek yazma sayısı aynı anahtarın tekrar yazılması ya da kısa ömürlü farklı anahtarlar olabilir.
Önerilen yöntem, birbirine karıştırılmayan iki kanıtı birlikte kullanır:
- Örneklenen başarılı kalıcı yazmalarda, grup başına farklı yazılan anahtarların yaklaşık sayısı ve bileşen/desen bilgisi. Mevcut istek başına örnekleme kararı korunur. Redis’in yerleşik HyperLogLog (PFADD/PFCOUNT) işlemleri kullanılır; yeni PHP kütüphanesi veya kendi olasılıksal sayaç algoritmamız eklenmez.
- Yalnız açık yönetici/CLI işlemiyle başlatılan, seçili grubun canlı v2 veri anahtarlarını inceleyen sınırlı SCAN. Ayrı zamanlarda tamamlanan iki uyumlu tarama karşılaştırılmadan “canlı anahtar sayısı arttı” sonucu üretilmez. Örneklenen farklı yazmalar tek başına büyüme kanıtı değildir.
Toplama ve gizlilik
- Yeni toplama varsayılan kapalıdır (
insights_key_tracking=false). Açıldığında normal Insights örnekleme oranını kullanır; HTTP profilindeki zorlanmış örnek geçmişe katılmaz.insights_key_groupsile öncelikli, açık grup adları seçilebilir; boş liste tüm gözlenen grupları aynı kaynak sınırları içinde değerlendirebilir. - İstek başına en fazla 256 başarılı anahtar gözlemi; tek/bulk yazmalar ve başarılı sayaç güncellemeleri mevcut sonuçlarından gözlenir. Kalıcı olmayan gruplar bu sayaca girmez. Yazma yinelemesi, ek değer okuma veya tekrar serileştirme yapılmaz.
- Ham anahtarlar/değerler kayda, loga veya rapora yazılmaz. En fazla 2.048 baytlık anahtar üzerinde sınırlı desen çözümlemesi yapılır; büyük/uygunsuz girdiler ve bütçe aşımı ayrı atlanma sayacıyla raporlanır. WordPress sırlarından türetilen HMAC ile anahtar ve normalize desen parmak izi oluşturulur. Sırlar geçersizse toplama kapalı kalır; düz/anahtarsız hash’e sessiz geçiş yapılmaz.
- Raporda desenin parmak izi ile UUID-benzeri, sayısal bölüm veya uzun hex bölüm gibi biçim etiketleri gösterilir; sabit metin parçaları da açığa çıkarılmaz. Bir sayının tarih, bir hex dizisinin oturum veya rastgele değer olduğu varsayılmaz. Bileşen, mevcut sınırlı caller çözümleyicinin gözlediği yazıcıdır; kök neden veya veri sahibi olduğu kesinleştirilmez.
Redis kaydı ve sınırlar
- Mevcut saatlik Insights şeması ve sekiz günlük geçmişi değişmez. Dedektör,
aynı v2 yardımcı anahtar bileşeniyle ayrı
key-growth-v1kayıtları tutar. - Site/saat başına en fazla 16 sabit grup yuvası ve yuva başına bir HLL; grup sahipliği ve en fazla 32 bileşen/desen satırı aynı saat kaydında bulunur. Meta verinin kodlanmış büyüklüğü saat başına en fazla 256 KiB olur. Grup ya da desen taşması açıkça gösterilir; bütün site gözlenmiş gibi raporlanmaz.
- Yuva sayısı yalnız bir indeksin başarılı yazılmasına bağlı kalmaz: fiziksel HLL anahtarları 0..15 sabit yuva kimlikleriyle üretilir. Yuva/grup sahipliği belirsizse eski sayacı farklı grup adına kullanmak yerine örnek atlanır.
- Kayıtlar saat başlangıcından itibaren 24 saat tutulur. Normalde site başına en fazla 384 saatlik HLL + sınırlı meta kayıtları bulunur. Redis’in yoğun HLL temsili yaklaşık 12 KiB veri kullanır; 384 HLL yaklaşık 4,5 MiB eder. Meta kayıtları en çok yaklaşık 6 MiB kodlanmış veri ekler; Redis anahtar/nesne/allocator masrafları bunlara dahil değildir. Bunlar veri sınırlarıdır, ölçülmüş toplam RAM garantisi veya etkinleştirme maliyetinin önemsiz olduğu iddiası değildir.
- Aynı site/saat kayıtları aynı Cluster slotuna konur. Mevcut ham codec kapsamı, yakalanmış ana bağlantı ve WATCH/MULTI/EXEC kullanılır. Çakışan veya belirsiz kayıt tekrar gönderilmez; örnek kaybı cache işleminin sonucunu değiştirmez. İstek kapanışında ek Redis komutları ve etkin isteklerde ek HMAC/çözümleme işi olur.
- PFCOUNT yaklaşık sonuç verir ve kendi önbelleklenmiş sayısını değiştirebilir; bu nedenle dedektörün bu çağrıları da ana bağlantı yolunda yürür. İstemci/server yetenekleri denetlenir; destek/ACL yoksa yeni özellik kullanılamaz olarak bildirilir. Relay desteği gerçek ortam testi tamamlanmadan doğrulanmış sayılmaz.
- Mevcut Insights ile aynı EXEC sınırı geçerlidir: hata önceki komutları geri almaz. Kısmi kayıt, indeks kaybı, bozuk/TTL’siz veri yeni güncellemelerde reddedilir; her kısmi sayaç değişikliği sonradan tespit edilemeyebilir. Expiry reddedilirse 24 saatlik tutma garanti edilemez; sağlık raporu bunu açık iş olarak gösterir.
İstek üzerine canlı doğrulama
- CLI
wp redis key-growth --group=<grup> --scanve mevcut yönetim ekranındaki açık işlem, yalnız seçilen site/grup için tarama başlatır. Normal ziyaretçiler, rapor GET isteği ve WP-Cron kendiliğinden SCAN başlatmaz. REST başlangıcı POST, mevcutobjectcache_manage, WordPress nonce ve CacheScope kurallarını kullanır. Global multisite grupları ağ yöneticisi kapsamı gerektirir. - Mevcut scanBatches yolu korunur; bitiş nedeni, çağrı sayısı ve kapsanan ana düğümler için ek tamamlanma bilgisi sağlanır. Eski listeleme/temizlik çağrılarının dönüş/yield davranışı değişmez. Tamamlanma durumu bilinmeyen özel backend için tamamlanmış tarama veya büyüme iddiası üretilmez.
- Varsayılan bütçe: bütün düğümler toplamında 200 SCAN, 100.000 işlenen anahtar, beş saniye yumuşak süre. Açık CLI seçenekleriyle üst sınırlar 2.000 SCAN, 1.000.000 anahtar ve 30 saniyedir. COUNT=500 ipucudur; tek cevabın kesin boyut sınırı sayılmaz. Süre kontrolü komutlar arasındadır; gönderilmiş komutun normal bağlantı timeout’u geçerlidir. Bütçe kesilirse sonuç kısmidir, başlangıç ölçümü yerine kullanılmaz.
- Yalnız geçerli v2 veri kayıtları sayılır; yardımcı metadata hariçtir. Dönen anahtarlar HMAC parmak izleri halinde geçici HLL’ye parçalı aktarılır; SCAN tekrarlarının ayrı anahtar sayısını şişirmesine izin verilmez. Cache değerleri okunmaz, uygulama anahtarları silinmez veya TTL’leri değiştirilmez.
- Namespace/site başına en fazla bir aktif tarama, beş dakikalık sahiplik ve sabit geçici yuvalarla sınırlanır. Mevcut sahiplik/WATCH sürüm ve yetenek koşulları kullanılır; eski/sona ermiş sahip yayın yapamaz. Geçici veri ve son iki tamamlanmış grup ölçümü ayrıca sınırlanır, süreli tutulur; belirsiz yazma/tüketim tekrar edilmez. Sonuç arşivi de site başına 16 grup yuvası ve her yuvada iki sonuçla sınırlıdır; yeni grup için yer gerektiğinde en eski tanı geçmişi çıkarılır, bu durum belirtilir. Bu işlem uygulamanın cache kayıtlarına dokunmaz.
- Başlangıç/bitişte ana düğüm kimliği/topoloji uyuşmazlığı, failover, kodlama/prefix/ grup/salt değişimi veya eksik kapsama karşılaştırmayı geçersiz kılar. Ham düğüm adresleri ve bağlantı sırları rapora konmaz. Bir SCAN turu atomik anlık görüntü değildir; eşzamanlı ekleme/silme sonuçları etkileyebilir.
Sonuçların anlamı
Örneklem raporu ayrı olarak “farklı yazılan anahtar tahmini”, örnekleme oranı, bütçeler, desenler ve gözlenen yazıcıları gösterir. Canlı doğrulama ise yalnız tamamlanmış ve karşılaştırılabilir iki taramada, en az 60 saniye arayla, en az 1.000 anahtarlık ve iki katlık tahmini artışta büyüme sinyali üretir. Bu eşikler inceleme kuralıdır; cache ısınması ve meşru trafik artışı da sinyal üretebilir. Başlangıç sıfırsa oran uydurulmaz, mutlak artış gösterilir. HLL’nin standart hatası kesin hata aralığı değildir; sonuçlar hiçbir zaman kesin anahtar sayısı veya tek başına doğrulanmış eklenti hatası diye sunulmaz. Düşük hacim, değişen örnekleme, eksik geçmiş, normal süre sonu ve salt değişimi ayrıca belirtilir. Otomatik TTL, grup kalıcılığı, temizlik veya başka eklenti kodunda değişiklik yapılmaz.
Mevcut yöntemi koruyan seçenek: yeni anahtar/desen verisi veya HLL toplamamak; Insights’ın genel yazma/okuma önerileri ve mevcut temizlik önizlemesiyle devam etmek. Bu seçenek anahtar patlaması dedektörünü tamamlamaz; özellik ertelenir.
Onay gereğinin kaynağı: kullanıcının bu sohbette paylaştığı AGENTS.md’deki “çalışma yöntemini veya iş akışını farklı bir yaklaşımla değiştirmeden önce kullanıcıdan açık onay al” kuralı. Atak planı dedektörün sonucunu tarif ediyor; HLL, anahtar/desen gözlemi, ek metadata ve tarama iş akışını belirtmiyor. Kullanıcı “Önerilen HLL + parmak izi + SCAN yöntemini uygula” seçeneğini onayladı. Kaynak uygulama; isteğe bağlı toplama, sabit HLL yuvaları, açık CLI/REST taraması, sınırlı arşiv ve mevcut Insights ekranındaki raporu içerir. Ayrıntılar ve son test kabul listesi KEY-GROWTH.md içindedir. Testler geliştirme sonunda çalıştırılacaktır; bu kaynak uygulaması çalışma zamanı veya üretim kabulü anlamına gelmez.
Uygulama ayrıntısı: canlı sayım, alloptions :hash uygulama kaydını bir mantıksal
veri anahtarı olarak sayar; tanı/koordinasyon yardımcılarını dışlar. 16 KiB’tan büyük
kodlanmış kimlikte tarama eksik sayılır. Başlangıç sıfırsa yalnız mutlak artış
verilir, oran eşiğine dayalı sinyal oluşmaz. Tek sınırlı arşiv en eski saklanan
sonucun 24 saatlik süresi dolduğunda sona erer; daha genç sonuçlar erken kaybolabilir.
Her iki durum raporda belirtilir, eksik veri sıfır sayılmaz.
Teknik dayanak: Redis PFCOUNT (yaklaşık sayım, temsil boyutu ve sayım önbelleğinin güncellenmesi), Redis PFADD (yerleşik HLL girişi), Redis SCAN (tekrarlar, değişen veri, COUNT ipucu ve cursor tamamlanma koşulu). Bunlar yöntem seçiminin sınırlarını açıklar; gerçek uygulama/performans testi yerine geçmez.
8. Hazır yapılandırma profilleri — onaylandı, kaynak uygulaması eklendi
Uygulama öncesi durum: drop-in ayarları WP_REDIS_CONFIG üzerinden, alternatif olarak
OBJECTCACHE_CONFIG JSON ortam değişkeninden yükleniyor. Yönetim REST options
kaydı yalnız eklenti arayüzü seçeneklerini tutuyor; erken cache bootstrap’ının
ayar kaynağı değil. ExpirationPolicy bugün genel maxttl, sorgu grupları için
queryttl ve kısaltıcı jitter uygular. Grup başına bağımsız TTL haritası yok.
Atak planı #20 dört hazır profil ile dışa/içe aktarmayı istiyor; profil önceliği,
saklama/etkinleştirme yöntemi ve grup TTL sözleşmesi belirtilmemiş.
Onaylanan yöntem: mevcut erken yapılandırma kaynağını koru. Yeni, açıkça seçilen preset
alana sahip yapılandırmayı başlangıçta çözümle; DB’den ayar okuma, otomatik
wp-config.php düzenleme veya uzaktan profil indirme ekleme. Profilin varlığı
tek başına siteye uygulanmaz. WP_REDIS_CONFIG içinde seçilmesi gerekir:
'preset' => 'woocommerce',
Çözümleme ve taşınabilir dosya
- Dört paket:
woocommerce,membership,publishing,multisite. - Öncelik: paket alanları < açık
WP_REDIS_CONFIGalanları. Açık alan, dizi olsa bile paketteki aynı alanı bütünüyle değiştirir; gizli recursive merge yapılmaz. Core/entegrasyonların bootstrap sırasında eklediği gruplar korunur. - JSON manifest:
schema=1,id,name,settings. En fazla 64 KiB, 8 katman, 128 grup TTL/exclusion girdisi; bilinmeyen alanlar reddedilir. JSON veri olarak okunur; PHP/eval/include, nesne veya kullanıcıdan sınıf adı kabul edilmez. - Taşınabilir ayarlar yalnız
group_ttl,queryttl,ttl_jitter,prefetch,prefetch_ttl,prefetch_max_keys,prefetch_max_requestsvenon_prefetchable_groupsolur. Bağlantı adresi, prefix, DB numarası, parola, token, lisans, TLS, serializer, global/nonpersistent gruplar dışa aktarılmaz; profilden bu alanlarla kapsam veya codec değişikliği yapılamaz. - Ajans manifest’i
presetalanında doğrulanmış dizi olarak da seçilebilir. Normal isteklerde dosya okuma veya DB bağımlılığı oluşmaz. wp redis preset list|show|export|import|diffmevcut CLI’ı genişletir. Export JSON verir; import yerel dosyayı sınırlarla okuyup doğrular ve yapılandırmaya eklenecek PHP/JSON parçasını üretir. Import canlı ayarı kendisi değiştirmez. Diff, yönetilen alanların mevcut ve etkin değerlerini gösterir.wp-config.phpdüzenleme/dağıtım mevcut işletim yöntemiyle yapılır.- Yönetim ekranı aynı katalog ve fark önizlemesini kullanır; tek tıkla etkin ayar
değiştiren DB kaydı eklenmez. Yetki
objectcache_manage; multisite’ta site-ağ etkisi ve mevcut raporlama bağlamı açıkça gösterilir.
Grup TTL davranışı
Yeni group_ttl haritası tam ve büyük/küçük harfe duyarlı grup adlarını kabul
eder; wildcard yoktur. En fazla 128 ad, her ad 1..1024 bayt, her değer tamsayı
0..2.592.000 saniye. Sıfır yalnız bu ek grup sınırını kapatır; varsa genel/sorgu
sınırları devam eder. Boş harita varsayılandır.
Yeni yazmadaki TTL, mevcut hesapla aynı şekilde çağıran TTL’si ve geçerli genel,
sorgu ve grup üst sınırlarının en küçüğüdür. Mevcut maxttl gibi, istenen TTL 0
olsa da pozitif bir sınır kaydı sonlu yapabilir. Jitter bundan sonra uygulanır;
TTL uzatılmaz. Kalıcı olmayan gruplar Redis’e taşınmaz. Artırma/azaltma mevcut
kalan TTL’yi korur; eski anahtarların TTL’leri geriye dönük taranıp değiştirilmez.
Aynı ortak politika tekil/toplu yazma, alloptions ve remember yayınında kullanılır;
why ve TTL incelemesi yeni sınırı açıklar. Yeni TTL hesabı ek Redis çağrısı üretmez.
İlk paket değerleri (ölçülmüş optimum değildir)
Aşağıdaki değerler açıkça seçilen başlangıç adaylarıdır. Profilin ismi, o uygulamanın bütün eklentilerini tanıdığı veya performans avantajı kanıtlandığı anlamına gelmez. Grup adları standart WP veri gruplarıdır; yalnız WooCommerce ürünlerine veya tek üyelik eklentisine özgü oldukları iddia edilmez.
| Paket | Grup TTL üst sınırları (s) | queryttl (s) | Prefetch | Metadata TTL (s) | Anahtar / istek kaydı sınırı |
|---|---|---|---|---|---|
| WooCommerce | posts=3600, post_meta=3600 | 900 | kapalı | 900 | 128 / 512 |
| Üyelik | users=300, user_meta=300 | 900 | kapalı | 600 | 64 / 256 |
| Haber/yayın | posts=300, terms=600 | 300 | açık | 300 | 256 / 1024 |
| Multisite | posts=900, terms=900 | 900 | kapalı | 600 | 64 / 256 |
Dört pakette jitter %10, ek prefetch hariçleri users ve user_meta olur;
bootstrap’ın mevcut hariçleri korunur. maxttl, ağ flush yöntemi ve diğer
ayarlar bu paketlerden gelmez. Daha kısa TTL veritabanı yükünü artırabilir;
prefetch açık paket ek okuma/metadata işi yapabilir. Başlangıç değerleri beş
tekrarlı gerçek ölçüm ve mevcut %5 p95/bellek kapısı geçmeden üretim önerisi olmaz.
Geri alma: preset alanını kaldırmak/değiştirmek ve dağıtılan açık ayarları önceki
haline getirmek. Daha önce yazılmış kayıtlar kendi kalan TTL’lerini taşır; geri
alma onları eski ömürlerine uzatmaz. Drop-in/API/codec ve cache namespace değişmez.
Mevcut yöntemi koruyan seçenek: grup TTL ve preset seçicisi eklemeden yalnız mevcut ayarlar için kopyalanabilir örnekler ve salt okunur dışa aktarma sağlamak. Bu seçenek #20’nin etkin profil çözümleme/grup TTL kısmını tamamlamaz.
Onay isteme nedeni: bu sohbette paylaşılan AGENTS.md’nin “çalışma yöntemini veya iş akışını farklı bir yaklaşımla değiştirmeden önce kullanıcıdan açık onay al” kuralı. Mevcut kaynak incelendi; yukarıdaki erken çözümleme, import davranışı ve gruba özel TTL yeni çalışma sözleşmeleridir. Genel geliştirmeye devam talimatı bunları tek başına onaylamış sayılmadı. Kullanıcı 2026-10-05 tarihinde “onaylıyorum” yanıtıyla bu yöntemi onayladı.
Kaynak uygulaması eklendi: dört katalog profili, doğrulanan taşınabilir manifest, açık alan önceliği, ortak grup TTL üst sınırı, CLI list/show/export/import/diff, yetkili ve mevcut siteyle sınırlı REST/yönetim önizlemesi. Kullanım, geri alma ve son doğrulama kapsamı CONFIGURATION-PROFILES.md içinde. PHP/lint/statik, backend, entegrasyon ve tarayıcı testleri çalıştırılmadı; geliştirme sonundaki aşamada. Ölçülmüş hız artışı veya üretim kabulü yok.
9. Tarihsel TTL kanıtı — yöntem onaylandı
Kullanıcı 2026-10-05 tarihinde açıkça “Evet, §9’daki yöntemi uygula” yanıtını verdi. Aşağıdaki sözleşme kaynak koda uygulanıyor; final test ve yayın kabulü ayrıca kanıtlanacak. Otomatik TTL değişikliği bu onaya dahil değildir.
2026-10-05 kaynak incelemesi: HourlyStore mevcut hour-v1 hash’inde sabit sayaç
listesi bekler; tanımadığı alanı veya eksik sayacı reddeder. Bu hash’e yeni TTL
sayaçları eklemek eski okuyucuların bütün saat kaydını geçersiz saymasına yol açar.
Mevcut istek örneklemesi ve saatlik WATCH yöntemi korunacak; tarihsel TTL kanıtının
nerede saklanacağı atak planında belirlenmediği için aşağıdaki ek kayıt yönteminin
uygulanması için alınan açık onay yukarıda kaydedilmiştir.
Bağımsız olarak tamamlanan kaynak işi: onaylı gerçek HTTP profil olaylarına sayısal TTL kanıtı ekleniyor. İstenen TTL, sınırlar sonrası/jitter öncesi TTL ve başarısı doğrulanan yazmadaki gönderilmiş TTL; çağrı başına en fazla 256 yanıt. Mevcut saatlik hash veya normal isteklerin örnek verisi genişletilmiyor. Bu veri geçici imzalı profil raporunun mevcut boyut/ömür sınırlarını kullanıyor.
Önerilen tarihsel yöntem:
- Yeni
insights_ttl_trackingvarsayılan false. Açıldığında yalnız mevcut örnekleme çekilişiyle seçilen isteklerde çalışır; yeni çekiliş/örnekleme oranı yoktur. Zorlanan HTTP profilleri saatlik kayda yine yazılmaz. - Normal örneklenmiş istek başına en fazla 256 yazma yanıtı ve 64 site/grup satırı. Bütçeyi aşan gözlemler sayılır; bütün trafik veya bütün yazmalar ölçülmüş gibi raporlanmaz. Sayaç ve runtime-only yazmaları yeni Redis TTL’si sayılmaz. Ham anahtar, değer, çağrı yığını ve bağlantı sırrı saklanmaz.
- Her site/saat için mevcut
objectcachead alanında ayrıttl-v1yardımcı kaydı: en fazla 64 grup + other, 64 KiB JSON, 192 saat mutlak saklama süresi. Mevcuthour-v1anahtarı, alanları ve 256 çift sınırı değişmez. Etiketler mevcut Insights kısaltma/parmak izi kurallarını kullanır. - Kayıt aynı ana bağlantıda mevcut WATCH/MULTI/EXEC mekanizmasıyla güncellenir. Okumalar içerik ve PTTL sınırlarıyla yapılır; yazma sonlu EX + mutlak EXPIREAT onayı ister. Çakışma/belirsiz yazma tekrar edilmez; kayıp örnek ve yazma sonucu cache işleminin sonucunu değiştirmez. Kısmi EXEC için rollback varsayılmaz.
- İstenen, sınırlandırılmış ve gönderilmiş TTL için sabit dokuz kutu: süresiz; 1–60; 61–300; 301–900; 901–3600; 3601–86400; 86401–604800; 604801–2592000; 2592000 üzeri. İstenen negatif TTL sıfıra normalleştirilir ve ayrıca sayılır. Ölçülen/onaylı/atlanmış yazmalar ile finite min/max raporlanır; anahtar ömrü, yeniden kullanım aralığı veya expiry sebebi çıkarımı yapılmaz.
- CLI’da mevcut
--ttl-review, yönetimde açık TTL geçmişi yükleme işlemi ve REST’te açıkttl_historyisteği veriyi en fazla dört saatlik parçalarla okur. Olağan Insights raporu ek okumayı kendiliğinden başlatmaz. Eksik/eski, bozuk, çakışmada kaybolan veya sınırda kesilen veri sıfır kullanım sayılmaz. - Rapor tamamlanmış saatlerde grup kanıtını gösterir. Runtime-only, çözülemeyen grup ve farklı site bağlamı ayrılır; multisite global gruplarda bir sitenin verisinden ağ için TTL kararı çıkarılmaz. Ayarları otomatik değiştirmez. Kullanım ömrü/freshness bütçesi olmadan kesin sayısal TTL önerisi üretilmez.
Etkisi: özellik açık ve istek örneklenmişse site başına ek metadata okuma/yazma transaction’ı, sınırlı PHP hesaplama/belleği ve ayrı Redis saklama maliyeti vardır. Tarihsel raporu açıkça yüklemek ek okuma üretir. Eski sürümler mevcut saatlik raporlarını okumaya/yazmaya devam eder; yeni TTL geçmişinde onların gözlemi yoktur. Ayar kapatıldığında yeni toplama durur; eldeki geçici kayıtlar süresiyle silinir. Dağıtım tek bir ayarı açıp kapatma yoluyla geri alınabilir; cache verileri ve TTL politikası bu ölçüm nedeniyle değişmez.
Mevcut yöntemi koruyan seçenek: yalnız geçici HTTP profilindeki TTL kanıtı ve var olan grup kullanım sınıflandırmasıyla devam etmek. Ek tarihsel saklama/Redis komutu oluşmaz; zaman içinde TTL dağılımı ve politika karşılaştırması görülemez.
Bu karar sayısal/otomatik TTL optimizasyonunu, tazelik garantisini veya per-key izlemeyi onaylamaz. Final aşamada eski kayıt/sürüm uyumu, sınırlar, örnek kapsamı, çoklu site, partial EXEC/ACL/expiry, gerçek backend’ler ve beş tekrarlı maliyet ölçümleri doğrulanmalıdır. Testler geliştirme sonundaki sırada kalır.