[{"data":1,"prerenderedAt":2001},["ShallowReactive",2],{"page-tr-\u002Fblog\u002Fredis-commands-and-caching":3,"related-tr-\u002Fblog\u002Fredis-commands-and-caching":1978},{"id":4,"title":5,"body":6,"date":1965,"description":1966,"extension":1967,"meta":1968,"navigation":82,"path":1969,"seo":1970,"stem":1971,"tags":1972,"translation":1976,"__hash__":1977},"pages_tr\u002Ftr\u002Fblog\u002Fredis-commands-and-caching.md","Redis Temel Komutları ve Cache Kullanımı",{"type":7,"value":8,"toc":1951},"minimark",[9,14,18,26,30,150,229,233,236,373,384,388,440,443,447,450,542,546,770,830,834,920,933,937,940,1322,1325,1493,1530,1536,1539,1559,1563,1566,1609,1663,1670,1674,1720,1750,1754,1840,1926,1935,1939,1947],[10,11,13],"h2",{"id":12},"giriş","Giriş",[15,16,17],"p",{},"Redis, verileri bellekte tutan, mikrosaniyeler mertebesinde yanıt veren bir anahtar-değer veritabanıdır. En yaygın kullanım alanı cache'tir; ama session saklama, rate limiting, kuyruk, sıralama tabloları (leaderboard) ve pub\u002Fsub için de sıkça kullanılır.",[15,19,20,21,25],{},"Bu yazıda ",[22,23,24],"code",{},"redis-cli"," ile temel komutları, veri tiplerini ve uygulamada cache olarak nasıl kullanılacağını ele alacağız.",[10,27,29],{"id":28},"_1-kurulum-ve-bağlanma","1. Kurulum ve bağlanma",[31,32,37],"pre",{"className":33,"code":34,"language":35,"meta":36,"style":36},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Docker ile en hızlı yol\ndocker run -d --name redis -p 6379:6379 redis:7-alpine\n\n# Ubuntu \u002F Debian\nsudo apt install -y redis-server\n\n# AlmaLinux \u002F RHEL\nsudo dnf install -y redis\nsudo systemctl enable --now redis\n","bash","",[22,38,39,48,77,84,90,108,113,119,134],{"__ignoreMap":36},[40,41,44],"span",{"class":42,"line":43},"line",1,[40,45,47],{"class":46},"sHwdD","# Docker ile en hızlı yol\n",[40,49,51,55,59,62,65,68,71,74],{"class":42,"line":50},2,[40,52,54],{"class":53},"sBMFI","docker",[40,56,58],{"class":57},"sfazB"," run",[40,60,61],{"class":57}," -d",[40,63,64],{"class":57}," --name",[40,66,67],{"class":57}," redis",[40,69,70],{"class":57}," -p",[40,72,73],{"class":57}," 6379:6379",[40,75,76],{"class":57}," redis:7-alpine\n",[40,78,80],{"class":42,"line":79},3,[40,81,83],{"emptyLinePlaceholder":82},true,"\n",[40,85,87],{"class":42,"line":86},4,[40,88,89],{"class":46},"# Ubuntu \u002F Debian\n",[40,91,93,96,99,102,105],{"class":42,"line":92},5,[40,94,95],{"class":53},"sudo",[40,97,98],{"class":57}," apt",[40,100,101],{"class":57}," install",[40,103,104],{"class":57}," -y",[40,106,107],{"class":57}," redis-server\n",[40,109,111],{"class":42,"line":110},6,[40,112,83],{"emptyLinePlaceholder":82},[40,114,116],{"class":42,"line":115},7,[40,117,118],{"class":46},"# AlmaLinux \u002F RHEL\n",[40,120,122,124,127,129,131],{"class":42,"line":121},8,[40,123,95],{"class":53},[40,125,126],{"class":57}," dnf",[40,128,101],{"class":57},[40,130,104],{"class":57},[40,132,133],{"class":57}," redis\n",[40,135,137,139,142,145,148],{"class":42,"line":136},9,[40,138,95],{"class":53},[40,140,141],{"class":57}," systemctl",[40,143,144],{"class":57}," enable",[40,146,147],{"class":57}," --now",[40,149,133],{"class":57},[31,151,153],{"className":33,"code":152,"language":35,"meta":36,"style":36},"redis-cli                          # lokal, 6379\nredis-cli -h 10.0.1.20 -p 6379 -a 'şifre'\nredis-cli -n 2                     # 2 numaralı veritabanı\nredis-cli PING                     # PONG\ndocker exec -it redis redis-cli\n",[22,154,155,162,191,204,214],{"__ignoreMap":36},[40,156,157,159],{"class":42,"line":43},[40,158,24],{"class":53},[40,160,161],{"class":46},"                          # lokal, 6379\n",[40,163,164,166,169,173,175,178,181,185,188],{"class":42,"line":50},[40,165,24],{"class":53},[40,167,168],{"class":57}," -h",[40,170,172],{"class":171},"sbssI"," 10.0.1.20",[40,174,70],{"class":57},[40,176,177],{"class":171}," 6379",[40,179,180],{"class":57}," -a",[40,182,184],{"class":183},"sMK4o"," '",[40,186,187],{"class":57},"şifre",[40,189,190],{"class":183},"'\n",[40,192,193,195,198,201],{"class":42,"line":79},[40,194,24],{"class":53},[40,196,197],{"class":57}," -n",[40,199,200],{"class":171}," 2",[40,202,203],{"class":46},"                     # 2 numaralı veritabanı\n",[40,205,206,208,211],{"class":42,"line":86},[40,207,24],{"class":53},[40,209,210],{"class":57}," PING",[40,212,213],{"class":46},"                     # PONG\n",[40,215,216,218,221,224,226],{"class":42,"line":92},[40,217,54],{"class":53},[40,219,220],{"class":57}," exec",[40,222,223],{"class":57}," -it",[40,225,67],{"class":57},[40,227,228],{"class":57}," redis-cli\n",[10,230,232],{"id":231},"_2-string","2. String",[15,234,235],{},"En temel tip. Metin, sayı, JSON ya da serileştirilmiş nesne tutabilir (en fazla 512 MB).",[31,237,239],{"className":33,"code":238,"language":35,"meta":36,"style":36},"SET user:42:name \"Şükrü\"\nGET user:42:name\nSET session:abc123 \"{...}\" EX 3600     # 1 saat sonra silinir\nSET lock:order:7 1 NX EX 30            # yoksa oluştur (basit kilit)\nMSET a 1 b 2\nMGET a b\nINCR page:views                         # atomik sayaç\nINCRBY page:views 10\nDEL user:42:name\nEXISTS user:42:name\n",[22,240,241,258,266,290,311,327,337,348,358,365],{"__ignoreMap":36},[40,242,243,246,249,252,255],{"class":42,"line":43},[40,244,245],{"class":53},"SET",[40,247,248],{"class":57}," user:42:name",[40,250,251],{"class":183}," \"",[40,253,254],{"class":57},"Şükrü",[40,256,257],{"class":183},"\"\n",[40,259,260,263],{"class":42,"line":50},[40,261,262],{"class":53},"GET",[40,264,265],{"class":57}," user:42:name\n",[40,267,268,270,273,275,278,281,284,287],{"class":42,"line":79},[40,269,245],{"class":53},[40,271,272],{"class":57}," session:abc123",[40,274,251],{"class":183},[40,276,277],{"class":57},"{...}",[40,279,280],{"class":183},"\"",[40,282,283],{"class":57}," EX",[40,285,286],{"class":171}," 3600",[40,288,289],{"class":46},"     # 1 saat sonra silinir\n",[40,291,292,294,297,300,303,305,308],{"class":42,"line":86},[40,293,245],{"class":53},[40,295,296],{"class":57}," lock:order:7",[40,298,299],{"class":171}," 1",[40,301,302],{"class":57}," NX",[40,304,283],{"class":57},[40,306,307],{"class":171}," 30",[40,309,310],{"class":46},"            # yoksa oluştur (basit kilit)\n",[40,312,313,316,319,321,324],{"class":42,"line":92},[40,314,315],{"class":53},"MSET",[40,317,318],{"class":57}," a",[40,320,299],{"class":171},[40,322,323],{"class":57}," b",[40,325,326],{"class":171}," 2\n",[40,328,329,332,334],{"class":42,"line":110},[40,330,331],{"class":53},"MGET",[40,333,318],{"class":57},[40,335,336],{"class":57}," b\n",[40,338,339,342,345],{"class":42,"line":115},[40,340,341],{"class":53},"INCR",[40,343,344],{"class":57}," page:views",[40,346,347],{"class":46},"                         # atomik sayaç\n",[40,349,350,353,355],{"class":42,"line":121},[40,351,352],{"class":53},"INCRBY",[40,354,344],{"class":57},[40,356,357],{"class":171}," 10\n",[40,359,360,363],{"class":42,"line":136},[40,361,362],{"class":53},"DEL",[40,364,265],{"class":57},[40,366,368,371],{"class":42,"line":367},10,[40,369,370],{"class":53},"EXISTS",[40,372,265],{"class":57},[15,374,375,376,379,380,383],{},"Anahtar adlarında ",[22,377,378],{},":"," ile hiyerarşi kurmak (",[22,381,382],{},"nesne:id:alan",") yaygın bir gelenektir; araçlar da bu yapıyı ağaç olarak gösterir.",[10,385,387],{"id":386},"_3-ttl-ve-süre-yönetimi","3. TTL ve süre yönetimi",[31,389,391],{"className":33,"code":390,"language":35,"meta":36,"style":36},"EXPIRE session:abc123 600     # 600 saniye\nTTL session:abc123            # kalan süre (saniye); -1 süresiz, -2 yok\nPEXPIRE key 1500              # milisaniye\nPERSIST session:abc123        # süreyi kaldır\n",[22,392,393,406,416,430],{"__ignoreMap":36},[40,394,395,398,400,403],{"class":42,"line":43},[40,396,397],{"class":53},"EXPIRE",[40,399,272],{"class":57},[40,401,402],{"class":171}," 600",[40,404,405],{"class":46},"     # 600 saniye\n",[40,407,408,411,413],{"class":42,"line":50},[40,409,410],{"class":53},"TTL",[40,412,272],{"class":57},[40,414,415],{"class":46},"            # kalan süre (saniye); -1 süresiz, -2 yok\n",[40,417,418,421,424,427],{"class":42,"line":79},[40,419,420],{"class":53},"PEXPIRE",[40,422,423],{"class":57}," key",[40,425,426],{"class":171}," 1500",[40,428,429],{"class":46},"              # milisaniye\n",[40,431,432,435,437],{"class":42,"line":86},[40,433,434],{"class":53},"PERSIST",[40,436,272],{"class":57},[40,438,439],{"class":46},"        # süreyi kaldır\n",[15,441,442],{},"Cache için kullanılan her anahtarın bir TTL'i olmalıdır; aksi halde bellek zamanla dolar.",[10,444,446],{"id":445},"_4-hash","4. Hash",[15,448,449],{},"Bir nesnenin alanlarını tek anahtar altında tutar:",[31,451,453],{"className":33,"code":452,"language":35,"meta":36,"style":36},"HSET user:42 name \"Şükrü\" email \"sukru@example.com\" plan \"pro\"\nHGET user:42 email\nHGETALL user:42\nHINCRBY user:42 login_count 1\nHDEL user:42 plan\nHEXISTS user:42 email\n",[22,454,455,492,502,510,523,533],{"__ignoreMap":36},[40,456,457,460,463,466,468,470,472,475,477,480,482,485,487,490],{"class":42,"line":43},[40,458,459],{"class":53},"HSET",[40,461,462],{"class":57}," user:42",[40,464,465],{"class":57}," name",[40,467,251],{"class":183},[40,469,254],{"class":57},[40,471,280],{"class":183},[40,473,474],{"class":57}," email",[40,476,251],{"class":183},[40,478,479],{"class":57},"sukru@example.com",[40,481,280],{"class":183},[40,483,484],{"class":57}," plan",[40,486,251],{"class":183},[40,488,489],{"class":57},"pro",[40,491,257],{"class":183},[40,493,494,497,499],{"class":42,"line":50},[40,495,496],{"class":53},"HGET",[40,498,462],{"class":57},[40,500,501],{"class":57}," email\n",[40,503,504,507],{"class":42,"line":79},[40,505,506],{"class":53},"HGETALL",[40,508,509],{"class":57}," user:42\n",[40,511,512,515,517,520],{"class":42,"line":86},[40,513,514],{"class":53},"HINCRBY",[40,516,462],{"class":57},[40,518,519],{"class":57}," login_count",[40,521,522],{"class":171}," 1\n",[40,524,525,528,530],{"class":42,"line":92},[40,526,527],{"class":53},"HDEL",[40,529,462],{"class":57},[40,531,532],{"class":57}," plan\n",[40,534,535,538,540],{"class":42,"line":110},[40,536,537],{"class":53},"HEXISTS",[40,539,462],{"class":57},[40,541,501],{"class":57},[10,543,545],{"id":544},"_5-list-set-ve-sorted-set","5. List, Set ve Sorted Set",[31,547,549],{"className":33,"code":548,"language":35,"meta":36,"style":36},"# List: sıralı, tekrar edebilir — kuyruk, son aktiviteler\nLPUSH queue:emails \"mail-1\" \"mail-2\"\nRPOP queue:emails\nLRANGE recent:42 0 9            # ilk 10 eleman\nLTRIM recent:42 0 99            # sadece son 100'ü tut\n\n# Set: sırasız, tekil — etiketler, benzersiz ziyaretçiler\nSADD post:7:tags redis cache\nSMEMBERS post:7:tags\nSISMEMBER post:7:tags redis\nSINTER user:1:follows user:2:follows   # ortak takip edilenler\n\n# Sorted Set: skora göre sıralı — leaderboard\nZADD leaderboard 1500 \"ali\" 2300 \"ayşe\" 1800 \"mehmet\"\nZREVRANGE leaderboard 0 2 WITHSCORES   # ilk 3\nZINCRBY leaderboard 100 \"ali\"\nZRANK leaderboard \"ali\"\n",[22,550,551,556,578,586,603,618,622,627,640,648,657,672,677,683,721,739,756],{"__ignoreMap":36},[40,552,553],{"class":42,"line":43},[40,554,555],{"class":46},"# List: sıralı, tekrar edebilir — kuyruk, son aktiviteler\n",[40,557,558,561,564,566,569,571,573,576],{"class":42,"line":50},[40,559,560],{"class":53},"LPUSH",[40,562,563],{"class":57}," queue:emails",[40,565,251],{"class":183},[40,567,568],{"class":57},"mail-1",[40,570,280],{"class":183},[40,572,251],{"class":183},[40,574,575],{"class":57},"mail-2",[40,577,257],{"class":183},[40,579,580,583],{"class":42,"line":79},[40,581,582],{"class":53},"RPOP",[40,584,585],{"class":57}," queue:emails\n",[40,587,588,591,594,597,600],{"class":42,"line":86},[40,589,590],{"class":53},"LRANGE",[40,592,593],{"class":57}," recent:42",[40,595,596],{"class":171}," 0",[40,598,599],{"class":171}," 9",[40,601,602],{"class":46},"            # ilk 10 eleman\n",[40,604,605,608,610,612,615],{"class":42,"line":92},[40,606,607],{"class":53},"LTRIM",[40,609,593],{"class":57},[40,611,596],{"class":171},[40,613,614],{"class":171}," 99",[40,616,617],{"class":46},"            # sadece son 100'ü tut\n",[40,619,620],{"class":42,"line":110},[40,621,83],{"emptyLinePlaceholder":82},[40,623,624],{"class":42,"line":115},[40,625,626],{"class":46},"# Set: sırasız, tekil — etiketler, benzersiz ziyaretçiler\n",[40,628,629,632,635,637],{"class":42,"line":121},[40,630,631],{"class":53},"SADD",[40,633,634],{"class":57}," post:7:tags",[40,636,67],{"class":57},[40,638,639],{"class":57}," cache\n",[40,641,642,645],{"class":42,"line":136},[40,643,644],{"class":53},"SMEMBERS",[40,646,647],{"class":57}," post:7:tags\n",[40,649,650,653,655],{"class":42,"line":367},[40,651,652],{"class":53},"SISMEMBER",[40,654,634],{"class":57},[40,656,133],{"class":57},[40,658,660,663,666,669],{"class":42,"line":659},11,[40,661,662],{"class":53},"SINTER",[40,664,665],{"class":57}," user:1:follows",[40,667,668],{"class":57}," user:2:follows",[40,670,671],{"class":46},"   # ortak takip edilenler\n",[40,673,675],{"class":42,"line":674},12,[40,676,83],{"emptyLinePlaceholder":82},[40,678,680],{"class":42,"line":679},13,[40,681,682],{"class":46},"# Sorted Set: skora göre sıralı — leaderboard\n",[40,684,686,689,692,694,696,699,701,704,706,709,711,714,716,719],{"class":42,"line":685},14,[40,687,688],{"class":53},"ZADD",[40,690,691],{"class":57}," leaderboard",[40,693,426],{"class":171},[40,695,251],{"class":183},[40,697,698],{"class":57},"ali",[40,700,280],{"class":183},[40,702,703],{"class":171}," 2300",[40,705,251],{"class":183},[40,707,708],{"class":57},"ayşe",[40,710,280],{"class":183},[40,712,713],{"class":171}," 1800",[40,715,251],{"class":183},[40,717,718],{"class":57},"mehmet",[40,720,257],{"class":183},[40,722,724,727,729,731,733,736],{"class":42,"line":723},15,[40,725,726],{"class":53},"ZREVRANGE",[40,728,691],{"class":57},[40,730,596],{"class":171},[40,732,200],{"class":171},[40,734,735],{"class":57}," WITHSCORES",[40,737,738],{"class":46},"   # ilk 3\n",[40,740,742,745,747,750,752,754],{"class":42,"line":741},16,[40,743,744],{"class":53},"ZINCRBY",[40,746,691],{"class":57},[40,748,749],{"class":171}," 100",[40,751,251],{"class":183},[40,753,698],{"class":57},[40,755,257],{"class":183},[40,757,759,762,764,766,768],{"class":42,"line":758},17,[40,760,761],{"class":53},"ZRANK",[40,763,691],{"class":57},[40,765,251],{"class":183},[40,767,698],{"class":57},[40,769,257],{"class":183},[771,772,773,786],"table",{},[774,775,776],"thead",{},[777,778,779,783],"tr",{},[780,781,782],"th",{},"Tip",[780,784,785],{},"Ne zaman",[787,788,789,798,806,814,822],"tbody",{},[777,790,791,795],{},[792,793,794],"td",{},"String",[792,796,797],{},"Tek değer, JSON cache, sayaç, kilit",[777,799,800,803],{},[792,801,802],{},"Hash",[792,804,805],{},"Alanları ayrı ayrı okunup yazılan nesneler",[777,807,808,811],{},[792,809,810],{},"List",[792,812,813],{},"Kuyruk, son N kayıt",[777,815,816,819],{},[792,817,818],{},"Set",[792,820,821],{},"Tekil üyelik, kesişim\u002Fbirleşim",[777,823,824,827],{},[792,825,826],{},"Sorted Set",[792,828,829],{},"Sıralama, zaman bazlı indeks, rate limit penceresi",[10,831,833],{"id":832},"_6-anahtarları-güvenle-bulmak","6. Anahtarları güvenle bulmak",[31,835,837],{"className":33,"code":836,"language":35,"meta":36,"style":36},"SCAN 0 MATCH user:* COUNT 100     # imleçle, sunucuyu bloklamadan\nredis-cli --scan --pattern 'cache:product:*'\nredis-cli --scan --pattern 'cache:product:*' | xargs redis-cli DEL\nTYPE user:42\nDBSIZE\n",[22,838,839,864,881,908,915],{"__ignoreMap":36},[40,840,841,844,846,849,852,856,859,861],{"class":42,"line":43},[40,842,843],{"class":53},"SCAN",[40,845,596],{"class":171},[40,847,848],{"class":57}," MATCH",[40,850,851],{"class":57}," user:",[40,853,855],{"class":854},"sTEyZ","*",[40,857,858],{"class":57}," COUNT",[40,860,749],{"class":171},[40,862,863],{"class":46},"     # imleçle, sunucuyu bloklamadan\n",[40,865,866,868,871,874,876,879],{"class":42,"line":50},[40,867,24],{"class":53},[40,869,870],{"class":57}," --scan",[40,872,873],{"class":57}," --pattern",[40,875,184],{"class":183},[40,877,878],{"class":57},"cache:product:*",[40,880,190],{"class":183},[40,882,883,885,887,889,891,893,896,899,902,905],{"class":42,"line":79},[40,884,24],{"class":53},[40,886,870],{"class":57},[40,888,873],{"class":57},[40,890,184],{"class":183},[40,892,878],{"class":57},[40,894,895],{"class":183},"'",[40,897,898],{"class":183}," |",[40,900,901],{"class":53}," xargs",[40,903,904],{"class":57}," redis-cli",[40,906,907],{"class":57}," DEL\n",[40,909,910,913],{"class":42,"line":86},[40,911,912],{"class":53},"TYPE",[40,914,509],{"class":57},[40,916,917],{"class":42,"line":92},[40,918,919],{"class":53},"DBSIZE\n",[921,922,923],"blockquote",{},[15,924,925,926,929,930,932],{},"Production'da ",[22,927,928],{},"KEYS *"," kullanmayın. Tüm anahtarları tek seferde taradığı için büyük veritabanlarında Redis'i saniyelerce bloklar. Yerine ",[22,931,843],{}," kullanın.",[10,934,936],{"id":935},"_7-cache-aside-deseni","7. Cache-aside deseni",[15,938,939],{},"En yaygın cache stratejisi: önce cache'e bak, yoksa veritabanından oku ve cache'e yaz.",[31,941,945],{"className":942,"code":943,"language":944,"meta":36,"style":36},"language-javascript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F Node.js — node-redis v4+\nimport { createClient } from 'redis'\n\nconst redis = await createClient({ url: 'redis:\u002F\u002Flocalhost:6379' }).connect()\n\nasync function getProduct(id) {\n  const key = `cache:product:${id}`\n  const cached = await redis.get(key)\n  if (cached) return JSON.parse(cached)\n\n  const product = await db.products.findById(id)\n  await redis.set(key, JSON.stringify(product), { EX: 300 })\n  return product\n}\n\nasync function updateProduct(id, data) {\n  await db.products.update(id, data)\n  await redis.del(`cache:product:${id}`)     \u002F\u002F cache'i geçersiz kıl\n}\n","javascript",[22,946,947,952,977,981,1032,1036,1058,1082,1108,1139,1143,1173,1221,1229,1234,1238,1260,1285,1317],{"__ignoreMap":36},[40,948,949],{"class":42,"line":43},[40,950,951],{"class":46},"\u002F\u002F Node.js — node-redis v4+\n",[40,953,954,958,961,964,967,970,972,975],{"class":42,"line":50},[40,955,957],{"class":956},"s7zQu","import",[40,959,960],{"class":183}," {",[40,962,963],{"class":854}," createClient",[40,965,966],{"class":183}," }",[40,968,969],{"class":956}," from",[40,971,184],{"class":183},[40,973,974],{"class":57},"redis",[40,976,190],{"class":183},[40,978,979],{"class":42,"line":79},[40,980,83],{"emptyLinePlaceholder":82},[40,982,983,987,990,993,996,999,1002,1005,1009,1011,1013,1016,1018,1020,1023,1026,1029],{"class":42,"line":86},[40,984,986],{"class":985},"spNyl","const",[40,988,989],{"class":854}," redis ",[40,991,992],{"class":183},"=",[40,994,995],{"class":956}," await",[40,997,963],{"class":998},"s2Zo4",[40,1000,1001],{"class":854},"(",[40,1003,1004],{"class":183},"{",[40,1006,1008],{"class":1007},"swJcz"," url",[40,1010,378],{"class":183},[40,1012,184],{"class":183},[40,1014,1015],{"class":57},"redis:\u002F\u002Flocalhost:6379",[40,1017,895],{"class":183},[40,1019,966],{"class":183},[40,1021,1022],{"class":854},")",[40,1024,1025],{"class":183},".",[40,1027,1028],{"class":998},"connect",[40,1030,1031],{"class":854},"()\n",[40,1033,1034],{"class":42,"line":92},[40,1035,83],{"emptyLinePlaceholder":82},[40,1037,1038,1041,1044,1047,1049,1053,1055],{"class":42,"line":110},[40,1039,1040],{"class":985},"async",[40,1042,1043],{"class":985}," function",[40,1045,1046],{"class":998}," getProduct",[40,1048,1001],{"class":183},[40,1050,1052],{"class":1051},"sHdIc","id",[40,1054,1022],{"class":183},[40,1056,1057],{"class":183}," {\n",[40,1059,1060,1063,1065,1068,1071,1074,1077,1079],{"class":42,"line":115},[40,1061,1062],{"class":985},"  const",[40,1064,423],{"class":854},[40,1066,1067],{"class":183}," =",[40,1069,1070],{"class":183}," `",[40,1072,1073],{"class":57},"cache:product:",[40,1075,1076],{"class":183},"${",[40,1078,1052],{"class":854},[40,1080,1081],{"class":183},"}`\n",[40,1083,1084,1086,1089,1091,1093,1095,1097,1100,1102,1105],{"class":42,"line":121},[40,1085,1062],{"class":985},[40,1087,1088],{"class":854}," cached",[40,1090,1067],{"class":183},[40,1092,995],{"class":956},[40,1094,67],{"class":854},[40,1096,1025],{"class":183},[40,1098,1099],{"class":998},"get",[40,1101,1001],{"class":1007},[40,1103,1104],{"class":854},"key",[40,1106,1107],{"class":1007},")\n",[40,1109,1110,1113,1116,1119,1122,1125,1128,1130,1133,1135,1137],{"class":42,"line":136},[40,1111,1112],{"class":956},"  if",[40,1114,1115],{"class":1007}," (",[40,1117,1118],{"class":854},"cached",[40,1120,1121],{"class":1007},") ",[40,1123,1124],{"class":956},"return",[40,1126,1127],{"class":854}," JSON",[40,1129,1025],{"class":183},[40,1131,1132],{"class":998},"parse",[40,1134,1001],{"class":1007},[40,1136,1118],{"class":854},[40,1138,1107],{"class":1007},[40,1140,1141],{"class":42,"line":367},[40,1142,83],{"emptyLinePlaceholder":82},[40,1144,1145,1147,1150,1152,1154,1157,1159,1162,1164,1167,1169,1171],{"class":42,"line":659},[40,1146,1062],{"class":985},[40,1148,1149],{"class":854}," product",[40,1151,1067],{"class":183},[40,1153,995],{"class":956},[40,1155,1156],{"class":854}," db",[40,1158,1025],{"class":183},[40,1160,1161],{"class":854},"products",[40,1163,1025],{"class":183},[40,1165,1166],{"class":998},"findById",[40,1168,1001],{"class":1007},[40,1170,1052],{"class":854},[40,1172,1107],{"class":1007},[40,1174,1175,1178,1180,1182,1185,1187,1189,1192,1194,1196,1199,1201,1204,1206,1208,1210,1212,1214,1217,1219],{"class":42,"line":674},[40,1176,1177],{"class":956},"  await",[40,1179,67],{"class":854},[40,1181,1025],{"class":183},[40,1183,1184],{"class":998},"set",[40,1186,1001],{"class":1007},[40,1188,1104],{"class":854},[40,1190,1191],{"class":183},",",[40,1193,1127],{"class":854},[40,1195,1025],{"class":183},[40,1197,1198],{"class":998},"stringify",[40,1200,1001],{"class":1007},[40,1202,1203],{"class":854},"product",[40,1205,1022],{"class":1007},[40,1207,1191],{"class":183},[40,1209,960],{"class":183},[40,1211,283],{"class":1007},[40,1213,378],{"class":183},[40,1215,1216],{"class":171}," 300",[40,1218,966],{"class":183},[40,1220,1107],{"class":1007},[40,1222,1223,1226],{"class":42,"line":679},[40,1224,1225],{"class":956},"  return",[40,1227,1228],{"class":854}," product\n",[40,1230,1231],{"class":42,"line":685},[40,1232,1233],{"class":183},"}\n",[40,1235,1236],{"class":42,"line":723},[40,1237,83],{"emptyLinePlaceholder":82},[40,1239,1240,1242,1244,1247,1249,1251,1253,1256,1258],{"class":42,"line":741},[40,1241,1040],{"class":985},[40,1243,1043],{"class":985},[40,1245,1246],{"class":998}," updateProduct",[40,1248,1001],{"class":183},[40,1250,1052],{"class":1051},[40,1252,1191],{"class":183},[40,1254,1255],{"class":1051}," data",[40,1257,1022],{"class":183},[40,1259,1057],{"class":183},[40,1261,1262,1264,1266,1268,1270,1272,1275,1277,1279,1281,1283],{"class":42,"line":758},[40,1263,1177],{"class":956},[40,1265,1156],{"class":854},[40,1267,1025],{"class":183},[40,1269,1161],{"class":854},[40,1271,1025],{"class":183},[40,1273,1274],{"class":998},"update",[40,1276,1001],{"class":1007},[40,1278,1052],{"class":854},[40,1280,1191],{"class":183},[40,1282,1255],{"class":854},[40,1284,1107],{"class":1007},[40,1286,1288,1290,1292,1294,1297,1299,1302,1304,1306,1308,1311,1314],{"class":42,"line":1287},18,[40,1289,1177],{"class":956},[40,1291,67],{"class":854},[40,1293,1025],{"class":183},[40,1295,1296],{"class":998},"del",[40,1298,1001],{"class":1007},[40,1300,1301],{"class":183},"`",[40,1303,1073],{"class":57},[40,1305,1076],{"class":183},[40,1307,1052],{"class":854},[40,1309,1310],{"class":183},"}`",[40,1312,1313],{"class":1007},")     ",[40,1315,1316],{"class":46},"\u002F\u002F cache'i geçersiz kıl\n",[40,1318,1320],{"class":42,"line":1319},19,[40,1321,1233],{"class":183},[15,1323,1324],{},"Spring Boot'ta aynı desen anotasyonlarla:",[31,1326,1330],{"className":1327,"code":1328,"language":1329,"meta":36,"style":36},"language-java shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","@Cacheable(value = \"products\", key = \"#id\")\npublic Product findById(Long id) { return repository.findById(id).orElseThrow(); }\n\n@CacheEvict(value = \"products\", key = \"#product.id\")\npublic Product update(Product product) { return repository.save(product); }\n","java",[22,1331,1332,1368,1417,1421,1455],{"__ignoreMap":36},[40,1333,1334,1337,1340,1342,1345,1347,1349,1351,1353,1355,1357,1359,1361,1364,1366],{"class":42,"line":43},[40,1335,1336],{"class":183},"@",[40,1338,1339],{"class":985},"Cacheable",[40,1341,1001],{"class":183},[40,1343,1344],{"class":53},"value",[40,1346,1067],{"class":183},[40,1348,251],{"class":183},[40,1350,1161],{"class":57},[40,1352,280],{"class":183},[40,1354,1191],{"class":183},[40,1356,423],{"class":53},[40,1358,1067],{"class":183},[40,1360,251],{"class":183},[40,1362,1363],{"class":57},"#id",[40,1365,280],{"class":183},[40,1367,1107],{"class":183},[40,1369,1370,1373,1376,1379,1381,1384,1387,1389,1391,1394,1397,1399,1401,1403,1405,1408,1411,1414],{"class":42,"line":50},[40,1371,1372],{"class":985},"public",[40,1374,1375],{"class":985}," Product",[40,1377,1378],{"class":998}," findById",[40,1380,1001],{"class":183},[40,1382,1383],{"class":985},"Long",[40,1385,1386],{"class":854}," id",[40,1388,1022],{"class":183},[40,1390,960],{"class":183},[40,1392,1393],{"class":956}," return",[40,1395,1396],{"class":854}," repository",[40,1398,1025],{"class":183},[40,1400,1166],{"class":998},[40,1402,1001],{"class":183},[40,1404,1052],{"class":854},[40,1406,1407],{"class":183},").",[40,1409,1410],{"class":998},"orElseThrow",[40,1412,1413],{"class":183},"();",[40,1415,1416],{"class":183}," }\n",[40,1418,1419],{"class":42,"line":79},[40,1420,83],{"emptyLinePlaceholder":82},[40,1422,1423,1425,1428,1430,1432,1434,1436,1438,1440,1442,1444,1446,1448,1451,1453],{"class":42,"line":86},[40,1424,1336],{"class":183},[40,1426,1427],{"class":985},"CacheEvict",[40,1429,1001],{"class":183},[40,1431,1344],{"class":53},[40,1433,1067],{"class":183},[40,1435,251],{"class":183},[40,1437,1161],{"class":57},[40,1439,280],{"class":183},[40,1441,1191],{"class":183},[40,1443,423],{"class":53},[40,1445,1067],{"class":183},[40,1447,251],{"class":183},[40,1449,1450],{"class":57},"#product.id",[40,1452,280],{"class":183},[40,1454,1107],{"class":183},[40,1456,1457,1459,1461,1464,1466,1469,1471,1473,1475,1477,1479,1481,1484,1486,1488,1491],{"class":42,"line":92},[40,1458,1372],{"class":985},[40,1460,1375],{"class":985},[40,1462,1463],{"class":998}," update",[40,1465,1001],{"class":183},[40,1467,1468],{"class":985},"Product",[40,1470,1149],{"class":854},[40,1472,1022],{"class":183},[40,1474,960],{"class":183},[40,1476,1393],{"class":956},[40,1478,1396],{"class":854},[40,1480,1025],{"class":183},[40,1482,1483],{"class":998},"save",[40,1485,1001],{"class":183},[40,1487,1203],{"class":854},[40,1489,1490],{"class":183},");",[40,1492,1416],{"class":183},[31,1494,1498],{"className":1495,"code":1496,"language":1497,"meta":36,"style":36},"language-properties shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","spring.cache.type=redis\nspring.data.redis.host=localhost\nspring.cache.redis.time-to-live=5m\n","properties",[22,1499,1500,1510,1520],{"__ignoreMap":36},[40,1501,1502,1505,1507],{"class":42,"line":43},[40,1503,1504],{"class":1007},"spring.cache.type",[40,1506,992],{"class":183},[40,1508,1509],{"class":854},"redis\n",[40,1511,1512,1515,1517],{"class":42,"line":50},[40,1513,1514],{"class":1007},"spring.data.redis.host",[40,1516,992],{"class":183},[40,1518,1519],{"class":854},"localhost\n",[40,1521,1522,1525,1527],{"class":42,"line":79},[40,1523,1524],{"class":1007},"spring.cache.redis.time-to-live",[40,1526,992],{"class":183},[40,1528,1529],{"class":854},"5m\n",[15,1531,1532,1535],{},[22,1533,1534],{},"@EnableCaching"," anotasyonunu bir configuration sınıfına eklemeyi unutmayın.",[15,1537,1538],{},"Dikkat edilmesi gerekenler:",[1540,1541,1542,1550,1556],"ul",{},[1543,1544,1545,1549],"li",{},[1546,1547,1548],"strong",{},"Güncellemede cache'i silin",", yeni değeri yazmaya çalışmayın; yarış durumlarında silmek daha güvenlidir.",[1543,1551,1552,1555],{},[1546,1553,1554],{},"TTL'e küçük bir rastgelelik ekleyin"," (ör. 300 ± 30 sn); aynı anda süresi dolan binlerce anahtar veritabanına ani yük bindirir.",[1543,1557,1558],{},"Cache'te olmayan kayıtlar için de kısa TTL'li boş bir değer yazmak, var olmayan ID'lerle veritabanının sürekli sorgulanmasını engeller.",[10,1560,1562],{"id":1561},"_8-bellek-sınırı-ve-eviction","8. Bellek sınırı ve eviction",[15,1564,1565],{},"Redis'i cache olarak kullanıyorsanız bellek sınırı ve çıkarma politikası belirleyin:",[31,1567,1569],{"className":33,"code":1568,"language":35,"meta":36,"style":36},"CONFIG SET maxmemory 512mb\nCONFIG SET maxmemory-policy allkeys-lru\nCONFIG GET maxmemory*\n",[22,1570,1571,1585,1597],{"__ignoreMap":36},[40,1572,1573,1576,1579,1582],{"class":42,"line":43},[40,1574,1575],{"class":53},"CONFIG",[40,1577,1578],{"class":57}," SET",[40,1580,1581],{"class":57}," maxmemory",[40,1583,1584],{"class":57}," 512mb\n",[40,1586,1587,1589,1591,1594],{"class":42,"line":50},[40,1588,1575],{"class":53},[40,1590,1578],{"class":57},[40,1592,1593],{"class":57}," maxmemory-policy",[40,1595,1596],{"class":57}," allkeys-lru\n",[40,1598,1599,1601,1604,1606],{"class":42,"line":79},[40,1600,1575],{"class":53},[40,1602,1603],{"class":57}," GET",[40,1605,1581],{"class":57},[40,1607,1608],{"class":854},"*\n",[771,1610,1611,1621],{},[774,1612,1613],{},[777,1614,1615,1618],{},[780,1616,1617],{},"Politika",[780,1619,1620],{},"Davranış",[787,1622,1623,1633,1643,1653],{},[777,1624,1625,1630],{},[792,1626,1627],{},[22,1628,1629],{},"noeviction",[792,1631,1632],{},"Varsayılan; bellek dolunca yazmalar hata verir",[777,1634,1635,1640],{},[792,1636,1637],{},[22,1638,1639],{},"allkeys-lru",[792,1641,1642],{},"En az kullanılan anahtarı siler; saf cache için önerilir",[777,1644,1645,1650],{},[792,1646,1647],{},[22,1648,1649],{},"volatile-lru",[792,1651,1652],{},"Sadece TTL'i olan anahtarlar arasından siler",[777,1654,1655,1660],{},[792,1656,1657],{},[22,1658,1659],{},"allkeys-lfu",[792,1661,1662],{},"En az sıklıkla kullanılanı siler",[15,1664,1665,1666,1669],{},"Kalıcı olması için aynı ayarları ",[22,1667,1668],{},"redis.conf"," içine yazın.",[10,1671,1673],{"id":1672},"_9-kalıcılık","9. Kalıcılık",[771,1675,1676,1686],{},[774,1677,1678],{},[777,1679,1680,1683],{},[780,1681,1682],{},"Yöntem",[780,1684,1685],{},"Açıklama",[787,1687,1688,1700,1712],{},[777,1689,1690,1693],{},[792,1691,1692],{},"RDB",[792,1694,1695,1696,1699],{},"Belirli aralıklarla anlık görüntü (",[22,1697,1698],{},"dump.rdb","); hızlı açılış, son değişiklikler kaybolabilir",[777,1701,1702,1705],{},[792,1703,1704],{},"AOF",[792,1706,1707,1708,1711],{},"Her yazma işlemini log'a ekler (",[22,1709,1710],{},"appendonly yes","); daha az veri kaybı, daha büyük dosya",[777,1713,1714,1717],{},[792,1715,1716],{},"Hiçbiri",[792,1718,1719],{},"Saf cache için; yeniden başlatmada veri gider",[31,1721,1723],{"className":33,"code":1722,"language":35,"meta":36,"style":36},"CONFIG SET appendonly yes\nBGSAVE                     # arka planda RDB anlık görüntüsü\nLASTSAVE\n",[22,1724,1725,1737,1745],{"__ignoreMap":36},[40,1726,1727,1729,1731,1734],{"class":42,"line":43},[40,1728,1575],{"class":53},[40,1730,1578],{"class":57},[40,1732,1733],{"class":57}," appendonly",[40,1735,1736],{"class":57}," yes\n",[40,1738,1739,1742],{"class":42,"line":50},[40,1740,1741],{"class":53},"BGSAVE",[40,1743,1744],{"class":46},"                     # arka planda RDB anlık görüntüsü\n",[40,1746,1747],{"class":42,"line":79},[40,1748,1749],{"class":53},"LASTSAVE\n",[10,1751,1753],{"id":1752},"_10-i̇zleme-ve-sorun-giderme","10. İzleme ve sorun giderme",[31,1755,1757],{"className":33,"code":1756,"language":35,"meta":36,"style":36},"INFO                       # tüm istatistikler\nINFO memory\nINFO stats                 # keyspace_hits \u002F keyspace_misses → hit oranı\nredis-cli --stat           # saniyelik özet\nredis-cli --bigkeys        # en büyük anahtarlar\nredis-cli --latency\nSLOWLOG GET 10             # yavaş komutlar\nCLIENT LIST\nMONITOR                    # tüm komutları canlı göster (sadece debug!)\n",[22,1758,1759,1767,1774,1784,1794,1804,1811,1824,1832],{"__ignoreMap":36},[40,1760,1761,1764],{"class":42,"line":43},[40,1762,1763],{"class":53},"INFO",[40,1765,1766],{"class":46},"                       # tüm istatistikler\n",[40,1768,1769,1771],{"class":42,"line":50},[40,1770,1763],{"class":53},[40,1772,1773],{"class":57}," memory\n",[40,1775,1776,1778,1781],{"class":42,"line":79},[40,1777,1763],{"class":53},[40,1779,1780],{"class":57}," stats",[40,1782,1783],{"class":46},"                 # keyspace_hits \u002F keyspace_misses → hit oranı\n",[40,1785,1786,1788,1791],{"class":42,"line":86},[40,1787,24],{"class":53},[40,1789,1790],{"class":57}," --stat",[40,1792,1793],{"class":46},"           # saniyelik özet\n",[40,1795,1796,1798,1801],{"class":42,"line":92},[40,1797,24],{"class":53},[40,1799,1800],{"class":57}," --bigkeys",[40,1802,1803],{"class":46},"        # en büyük anahtarlar\n",[40,1805,1806,1808],{"class":42,"line":110},[40,1807,24],{"class":53},[40,1809,1810],{"class":57}," --latency\n",[40,1812,1813,1816,1818,1821],{"class":42,"line":115},[40,1814,1815],{"class":53},"SLOWLOG",[40,1817,1603],{"class":57},[40,1819,1820],{"class":171}," 10",[40,1822,1823],{"class":46},"             # yavaş komutlar\n",[40,1825,1826,1829],{"class":42,"line":121},[40,1827,1828],{"class":53},"CLIENT",[40,1830,1831],{"class":57}," LIST\n",[40,1833,1834,1837],{"class":42,"line":136},[40,1835,1836],{"class":53},"MONITOR",[40,1838,1839],{"class":46},"                    # tüm komutları canlı göster (sadece debug!)\n",[771,1841,1842,1852],{},[774,1843,1844],{},[777,1845,1846,1849],{},[780,1847,1848],{},"Sorun",[780,1850,1851],{},"Çözüm",[787,1853,1854,1870,1886,1897,1918],{},[777,1855,1856,1861],{},[792,1857,1858],{},[22,1859,1860],{},"OOM command not allowed",[792,1862,1863,1866,1867,1869],{},[22,1864,1865],{},"maxmemory"," doldu ve politika ",[22,1868,1629],{},"; politikayı değiştirin ya da belleği artırın",[777,1871,1872,1877],{},[792,1873,1874],{},[22,1875,1876],{},"NOAUTH Authentication required",[792,1878,1879,1882,1883],{},[22,1880,1881],{},"-a"," ile şifre verin ya da ",[22,1884,1885],{},"AUTH şifre",[777,1887,1888,1891],{},[792,1889,1890],{},"Bağlantı reddediliyor",[792,1892,1893,1896],{},[22,1894,1895],{},"bind 127.0.0.1"," sadece lokale açık; uzak erişim için bind ve firewall ayarı, mutlaka şifreyle",[777,1898,1899,1902],{},[792,1900,1901],{},"Redis anlık donuyor",[792,1903,1904,1907,1908,1910,1911,1913,1914,1917],{},[22,1905,1906],{},"KEYS",", büyük ",[22,1909,362],{}," ya da ",[22,1912,1815],{},"'daki komutlara bakın; büyük anahtarlar için ",[22,1915,1916],{},"UNLINK"," kullanın",[777,1919,1920,1923],{},[792,1921,1922],{},"Hit oranı düşük",[792,1924,1925],{},"TTL çok kısa ya da anahtar adları tutarsız",[921,1927,1928],{},[15,1929,1930,1931,1934],{},"Redis'i şifresiz ve internete açık bırakmayın. Bu, en sık rastlanan Redis güvenlik açığıdır; ",[22,1932,1933],{},"requirepass"," (ya da Redis 6+ ACL) ayarlayın ve portu sadece uygulama sunucularına açın.",[10,1936,1938],{"id":1937},"sonuç","Sonuç",[15,1940,1941,1942,1944,1945,932],{},"Redis'in gücü, doğru veri tipini doğru işte kullanmaktan gelir: tek değer için string, nesne için hash, sıralama için sorted set. Cache olarak kullanırken üç kural çoğu sorunu baştan çözer: her anahtara TTL verin, güncellemede cache'i silin ve production'da ",[22,1943,1906],{}," yerine ",[22,1946,843],{},[1948,1949,1950],"style",{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}",{"title":36,"searchDepth":50,"depth":50,"links":1952},[1953,1954,1955,1956,1957,1958,1959,1960,1961,1962,1963,1964],{"id":12,"depth":50,"text":13},{"id":28,"depth":50,"text":29},{"id":231,"depth":50,"text":232},{"id":386,"depth":50,"text":387},{"id":445,"depth":50,"text":446},{"id":544,"depth":50,"text":545},{"id":832,"depth":50,"text":833},{"id":935,"depth":50,"text":936},{"id":1561,"depth":50,"text":1562},{"id":1672,"depth":50,"text":1673},{"id":1752,"depth":50,"text":1753},{"id":1937,"depth":50,"text":1938},"2026-11-03","redis-cli ile veri tipleri (string, hash, list, set, sorted set), TTL, cache-aside deseni, Spring Boot ve Node.js entegrasyonu, kalıcılık ve izleme komutları.","md",{},"\u002Ftr\u002Fblog\u002Fredis-commands-and-caching",{"title":5,"description":1966},"tr\u002Fblog\u002Fredis-commands-and-caching",[974,1973,1974,1975],"cache","veritabanı","rehber","\u002Fen\u002Fblog\u002Fredis-commands-and-caching","JpZXPCt57--uGcNaw2Pw1YMP-_LAurZyoU1kHoUT8OQ",[1979,1986,1992],{"path":1980,"title":1981,"description":1982,"date":1983,"tags":1984},"\u002Ftr\u002Fblog\u002Fpostgresql-psql-commands","PostgreSQL ve psql Temel Komutları","psql ile bağlanma, meta komutlar (\\l, \\dt, \\d), kullanıcı ve yetki yönetimi, yedekleme\u002Fgeri yükleme, sorgu analizi ve günlük bakım komutları.","2026-11-02",[1985,1974,1975],"postgresql",{"path":1987,"title":1988,"description":1989,"date":1990,"tags":1991},"\u002Ftr\u002Fblog\u002Fjava-21-features","Java 21 Yenilikleri: Virtual Threads, Records ve Pattern Matching","Java 21 LTS ile gelen ve günlük kodu en çok değiştiren özellikler — virtual threads, record'lar, switch pattern matching, record pattern'leri, sealed sınıflar ve sequenced collections.","2026-11-01",[1329,1975],{"path":1993,"title":1994,"description":1995,"date":1996,"tags":1997},"\u002Ftr\u002Fblog\u002Fssh-config-and-tunneling","SSH Config, Anahtar Yönetimi ve Tünelleme","ed25519 anahtar üretmek, ssh-agent, ~\u002F.ssh\u002Fconfig ile kısayollar, jump host, port yönlendirme (-L, -R, -D) ve sunucu tarafı güvenlik ayarları.","2026-10-31",[1998,1999,2000,1975],"ssh","linux","güvenlik",1793674377135]