[{"data":1,"prerenderedAt":1813},["ShallowReactive",2],{"navigation:de":3,"auto-image:entries:\u002Fblog\u002Fshopware-6-redis-configuration-mistakes":47,"blog:de:\u002Fblog\u002Fshopware-6-redis-configuration-mistakes":48},[4],{"title":5,"path":6,"stem":7,"children":8,"page":46},"De","\u002Fde","de",[9],{"title":10,"path":11,"stem":12,"children":13,"page":46},"Services","\u002Fde\u002Fservices","de\u002Fservices",[14,18,22,26,30,34,38,42],{"title":15,"path":16,"stem":17},"KI-gestützte Contentproduktion","\u002Fde\u002Fservices\u002Fai-content-creation","de\u002Fservices\u002Fai-content-creation",{"title":19,"path":20,"stem":21},"E-Commerce Entwicklung","\u002Fde\u002Fservices\u002Fecommerce","de\u002Fservices\u002Fecommerce",{"title":23,"path":24,"stem":25},"EDI Integration","\u002Fde\u002Fservices\u002Fedi-integration","de\u002Fservices\u002Fedi-integration",{"title":27,"path":28,"stem":29},"ERP Integration","\u002Fde\u002Fservices\u002Ferp-integration","de\u002Fservices\u002Ferp-integration",{"title":31,"path":32,"stem":33},"Individualentwicklung","\u002Fde\u002Fservices\u002Findividual-development","de\u002Fservices\u002Findividual-development",{"title":35,"path":36,"stem":37},"System Integration","\u002Fde\u002Fservices\u002Fsystem-integration","de\u002Fservices\u002Fsystem-integration",{"title":39,"path":40,"stem":41},"Migration & Systemmodernisierung","\u002Fde\u002Fservices\u002Fsystem-modernization-migration","de\u002Fservices\u002Fsystem-modernization-migration",{"title":43,"path":44,"stem":45},"UX\u002FUI Design","\u002Fde\u002Fservices\u002Fux-ui-design","de\u002Fservices\u002Fux-ui-design",false,{},{"id":49,"title":50,"body":51,"description":1780,"draft":46,"extension":1781,"meta":1782,"navigation":379,"path":1783,"publishAt":1784,"robots":1785,"schemaOrg":1786,"seo":1798,"sitemap":1801,"stem":1805,"tags":1806,"__hash__":1812},"blog_de\u002Fde\u002Fblog\u002Fshopware-6-redis-configuration-mistakes.md","Shopware 6 & Redis: Wenn falsche Konfiguration mehr schadet als nutzt",{"type":52,"value":53,"toc":1768},"minimark",[54,58,68,71,74,79,82,88,110,115,122,206,223,226,293,296,458,467,469,473,480,484,499,504,526,529,540,570,572,576,582,586,594,598,601,615,618,633,640,694,696,700,703,708,733,738,778,784,786,790,793,798,813,816,1057,1186,1193,1239,1241,1245,1248,1274,1289,1294,1308,1312,1337,1339,1343,1346,1364,1374,1377,1379,1383,1386,1391,1507,1513,1520,1522,1526,1529,1534,1537,1562,1571,1576,1596,1602,1609,1620,1623,1625,1629,1761,1764],[55,56,50],"h1",{"id":57},"shopware-6-redis-wenn-falsche-konfiguration-mehr-schadet-als-nutzt",[59,60,61,62,67],"p",{},"Redis ist in ",[63,64,66],"nuxt-link",{"to":65},"\u002Fservices\u002Fecommerce","Shopware 6"," das Mittel der Wahl, um Cache, Sessions und HTTP-Cache aus der Datenbank bzw. dem Dateisystem zu\nholen und die Performance drastisch zu steigern. In der Praxis sehen wir aber regelmäßig Setups, in denen Redis zum\nFlaschenhals wird — nicht, weil Redis langsam ist, sondern weil es falsch konfiguriert wurde.",[59,69,70],{},"Dieser Artikel zeigt die häufigsten Fehler und wie man sie vermeidet.",[72,73],"hr",{},[75,76,78],"h2",{"id":77},"fehler-1-eine-redis-instanz-für-alles","Fehler 1: Eine Redis-Instanz für alles",[59,80,81],{},"Das ist der Klassiker. Eine einzige Redis-Instanz auf Port 6379 wird für Cache, Sessions, HTTP-Cache, Cart-Persistenz,\nNumber-Ranges, Locks, Increment-Storage und Message-Queue verwendet.",[59,83,84],{},[85,86,87],"strong",{},"Warum das schadet:",[89,90,91,100,107],"ul",{},[92,93,94,95,99],"li",{},"Cache-Daten konkurrieren mit Session-Daten um den verfügbaren Speicher. Wenn ",[96,97,98],"code",{},"maxmemory"," greift und die\nEviction-Policy Keys räumt, können das Session- oder Warenkorb-Keys sein — Kunden fliegen aus dem Checkout oder\nverlieren ihren Warenkorb.",[92,101,102,103,106],{},"Ein unbedachtes ",[96,104,105],{},"FLUSHALL"," im Debugging löscht alles auf einen Schlag — Sessions, Warenkörbe, Number-Range-States.",[92,108,109],{},"Unterschiedliche Datentypen brauchen unterschiedliche Persistenz- und Eviction-Strategien. Cache-Daten sind flüchtig,\nWarenkörbe und Number-Ranges sind es nicht.",[59,111,112],{},[85,113,114],{},"Lösung: Mindestens zwei getrennte Redis-Instanzen — ephemeral und persistent.",[59,116,117,118,121],{},"Seit Shopware 6.6.8.0 werden benannte Redis-Connections direkt in der ",[96,119,120],{},"shopware.yaml"," unterstützt:",[123,124,129],"pre",{"className":125,"code":126,"language":127,"meta":128,"style":128},"language-yaml shiki shiki-themes github-light github-dark","# config\u002Fpackages\u002Fshopware.yaml\nshopware:\n  redis:\n    connections:\n      ephemeral:\n        dsn: '%env(REDIS_EPHEMERAL)%'\n      persistent:\n        dsn: '%env(REDIS_PERSISTENT)%'\n","yaml","",[96,130,131,140,151,159,167,175,188,196],{"__ignoreMap":128},[132,133,136],"span",{"class":134,"line":135},"line",1,[132,137,139],{"class":138},"sJ8bj","# config\u002Fpackages\u002Fshopware.yaml\n",[132,141,143,147],{"class":134,"line":142},2,[132,144,146],{"class":145},"s9eBZ","shopware",[132,148,150],{"class":149},"sVt8B",":\n",[132,152,154,157],{"class":134,"line":153},3,[132,155,156],{"class":145},"  redis",[132,158,150],{"class":149},[132,160,162,165],{"class":134,"line":161},4,[132,163,164],{"class":145},"    connections",[132,166,150],{"class":149},[132,168,170,173],{"class":134,"line":169},5,[132,171,172],{"class":145},"      ephemeral",[132,174,150],{"class":149},[132,176,178,181,184],{"class":134,"line":177},6,[132,179,180],{"class":145},"        dsn",[132,182,183],{"class":149},": ",[132,185,187],{"class":186},"sZZnC","'%env(REDIS_EPHEMERAL)%'\n",[132,189,191,194],{"class":134,"line":190},7,[132,192,193],{"class":145},"      persistent",[132,195,150],{"class":149},[132,197,199,201,203],{"class":134,"line":198},8,[132,200,180],{"class":145},[132,202,183],{"class":149},[132,204,205],{"class":186},"'%env(REDIS_PERSISTENT)%'\n",[123,207,211],{"className":208,"code":209,"language":210,"meta":128,"style":128},"language-dotenv shiki shiki-themes github-light github-dark","REDIS_EPHEMERAL=redis:\u002F\u002Fredis-cache:6379\nREDIS_PERSISTENT=redis:\u002F\u002Fredis-session:6380\n","dotenv",[96,212,213,218],{"__ignoreMap":128},[132,214,215],{"class":134,"line":135},[132,216,217],{},"REDIS_EPHEMERAL=redis:\u002F\u002Fredis-cache:6379\n",[132,219,220],{"class":134,"line":142},[132,221,222],{},"REDIS_PERSISTENT=redis:\u002F\u002Fredis-session:6380\n",[59,224,225],{},"Diese Connection-Namen können dann in allen Subsystemen referenziert werden — Cache, Sessions, Cart, Number-Ranges,\nLocks, Increment-Storage.",[227,228,229,248],"table",{},[230,231,232],"thead",{},[233,234,235,239,242,245],"tr",{},[236,237,238],"th",{},"Instanz",[236,240,241],{},"Zweck",[236,243,244],{},"Persistenz",[236,246,247],{},"Eviction-Policy",[249,250,251,272],"tbody",{},[233,252,253,259,262,267],{},[254,255,256],"td",{},[96,257,258],{},"ephemeral",[254,260,261],{},"App-Cache, HTTP-Cache, Locks, Increment",[254,263,264],{},[85,265,266],{},"Aus",[254,268,269],{},[96,270,271],{},"allkeys-lru",[233,273,274,279,282,288],{},[254,275,276],{},[96,277,278],{},"persistent",[254,280,281],{},"Sessions, Warenkörbe, Number-Ranges",[254,283,284,287],{},[85,285,286],{},"An"," (RDB + AOF)",[254,289,290],{},[96,291,292],{},"volatile-lru",[59,294,295],{},"Docker-Compose-Auszug:",[123,297,299],{"className":125,"code":298,"language":127,"meta":128,"style":128},"services:\n  redis-cache:\n    image: redis:7-alpine\n    command: >\n      redis-server\n        --maxmemory 2gb\n        --maxmemory-policy allkeys-lru\n        --save \"\"\n        --appendonly no\n    volumes: [ ]  # Kein Volume — Cache ist flüchtig\n\n  redis-session:\n    image: redis:7-alpine\n    command: >\n      redis-server\n        --maxmemory 256mb\n        --maxmemory-policy volatile-lru\n        --appendonly yes\n        --appendfsync everysec\n        --save \"3600 1\" --save \"300 100\"\n    volumes:\n      - redis-session-data:\u002Fdata\n",[96,300,301,308,315,325,336,341,346,351,356,362,374,381,389,398,407,412,418,424,430,436,442,449],{"__ignoreMap":128},[132,302,303,306],{"class":134,"line":135},[132,304,305],{"class":145},"services",[132,307,150],{"class":149},[132,309,310,313],{"class":134,"line":142},[132,311,312],{"class":145},"  redis-cache",[132,314,150],{"class":149},[132,316,317,320,322],{"class":134,"line":153},[132,318,319],{"class":145},"    image",[132,321,183],{"class":149},[132,323,324],{"class":186},"redis:7-alpine\n",[132,326,327,330,332],{"class":134,"line":161},[132,328,329],{"class":145},"    command",[132,331,183],{"class":149},[132,333,335],{"class":334},"szBVR",">\n",[132,337,338],{"class":134,"line":169},[132,339,340],{"class":186},"      redis-server\n",[132,342,343],{"class":134,"line":177},[132,344,345],{"class":186},"        --maxmemory 2gb\n",[132,347,348],{"class":134,"line":190},[132,349,350],{"class":186},"        --maxmemory-policy allkeys-lru\n",[132,352,353],{"class":134,"line":198},[132,354,355],{"class":186},"        --save \"\"\n",[132,357,359],{"class":134,"line":358},9,[132,360,361],{"class":186},"        --appendonly no\n",[132,363,365,368,371],{"class":134,"line":364},10,[132,366,367],{"class":145},"    volumes",[132,369,370],{"class":149},": [ ]  ",[132,372,373],{"class":138},"# Kein Volume — Cache ist flüchtig\n",[132,375,377],{"class":134,"line":376},11,[132,378,380],{"emptyLinePlaceholder":379},true,"\n",[132,382,384,387],{"class":134,"line":383},12,[132,385,386],{"class":145},"  redis-session",[132,388,150],{"class":149},[132,390,392,394,396],{"class":134,"line":391},13,[132,393,319],{"class":145},[132,395,183],{"class":149},[132,397,324],{"class":186},[132,399,401,403,405],{"class":134,"line":400},14,[132,402,329],{"class":145},[132,404,183],{"class":149},[132,406,335],{"class":334},[132,408,410],{"class":134,"line":409},15,[132,411,340],{"class":186},[132,413,415],{"class":134,"line":414},16,[132,416,417],{"class":186},"        --maxmemory 256mb\n",[132,419,421],{"class":134,"line":420},17,[132,422,423],{"class":186},"        --maxmemory-policy volatile-lru\n",[132,425,427],{"class":134,"line":426},18,[132,428,429],{"class":186},"        --appendonly yes\n",[132,431,433],{"class":134,"line":432},19,[132,434,435],{"class":186},"        --appendfsync everysec\n",[132,437,439],{"class":134,"line":438},20,[132,440,441],{"class":186},"        --save \"3600 1\" --save \"300 100\"\n",[132,443,445,447],{"class":134,"line":444},21,[132,446,367],{"class":145},[132,448,150],{"class":149},[132,450,452,455],{"class":134,"line":451},22,[132,453,454],{"class":149},"      - ",[132,456,457],{"class":186},"redis-session-data:\u002Fdata\n",[59,459,460,461,463,464,466],{},"Die Shopware-Docs empfehlen ",[96,462,292],{}," für die persistente Instanz — damit werden nur Keys mit gesetztem TTL\nevictet, während Keys ohne Ablauf (z. B. Number-Ranges) immer erhalten bleiben. Das ist der entscheidende Unterschied zu\n",[96,465,271],{},", das auch Keys ohne TTL löschen würde.",[72,468],{},[75,470,472],{"id":471},"fehler-2-persistenz-auf-der-cache-instanz-aktiviert","Fehler 2: Persistenz auf der Cache-Instanz aktiviert",[59,474,475,476,479],{},"Standardmäßig startet Redis mit aktivierten RDB-Snapshots (",[96,477,478],{},"save 3600 1 300 100 60 10000","). Das bedeutet: Redis schreibt\nregelmäßig den gesamten Datensatz auf die Festplatte, auch wenn es sich nur um flüchtigen Cache handelt.",[59,481,482],{},[85,483,87],{},[89,485,486,493,496],{},[92,487,488,489,492],{},"Der ",[96,490,491],{},"BGSAVE","-Prozess forkt den Redis-Prozess. Bei 2 GB Cache-Daten werden kurzzeitig 2 GB zusätzlicher RAM durch\nCopy-on-Write belegt. Auf einer VM mit 4 GB RAM kann das zum OOM-Kill führen.",[92,494,495],{},"Disk-I\u002FO durch den Dump belastet das System unnötig, besonders auf Shared-Hosting oder kleinen VPS mit langsamen\nPlatten.",[92,497,498],{},"Beim Neustart lädt Redis den Dump und stellt veraltete Cache-Daten wieder her. Das klingt erstmal gut, ist aber\nkontraproduktiv: Der Cache enthält nach einem Deployment möglicherweise veraltete Einträge, die Shopware dann\nausliefert, statt sie neu zu generieren.",[59,500,501],{},[85,502,503],{},"Lösung:",[123,505,509],{"className":506,"code":507,"language":508,"meta":128,"style":128},"language-conf shiki shiki-themes github-light github-dark","# redis-cache.conf (ephemeral)\nsave \"\"\nappendonly no\n","conf",[96,510,511,516,521],{"__ignoreMap":128},[132,512,513],{"class":134,"line":135},[132,514,515],{},"# redis-cache.conf (ephemeral)\n",[132,517,518],{"class":134,"line":142},[132,519,520],{},"save \"\"\n",[132,522,523],{"class":134,"line":153},[132,524,525],{},"appendonly no\n",[59,527,528],{},"Zwei Zeilen. Kein RDB, kein AOF. Die Cache-Instanz startet leer — genau so soll es sein. Shopware baut den Cache bei\nBedarf neu auf.",[59,530,531,532,535,536,539],{},"Für die ",[85,533,534],{},"persistente Instanz"," (Sessions, Carts, Number-Ranges) ist Persistenz dagegen ",[85,537,538],{},"zwingend",":",[123,541,543],{"className":506,"code":542,"language":508,"meta":128,"style":128},"# redis-session.conf (persistent)\nappendonly yes\nappendfsync everysec\nsave 3600 1\nsave 300 100\n",[96,544,545,550,555,560,565],{"__ignoreMap":128},[132,546,547],{"class":134,"line":135},[132,548,549],{},"# redis-session.conf (persistent)\n",[132,551,552],{"class":134,"line":142},[132,553,554],{},"appendonly yes\n",[132,556,557],{"class":134,"line":153},[132,558,559],{},"appendfsync everysec\n",[132,561,562],{"class":134,"line":161},[132,563,564],{},"save 3600 1\n",[132,566,567],{"class":134,"line":169},[132,568,569],{},"save 300 100\n",[72,571],{},[75,573,575],{"id":574},"fehler-3-kein-maxmemory-gesetzt","Fehler 3: Kein maxmemory gesetzt",[59,577,578,579,581],{},"Ohne ",[96,580,98],{},"-Limit wächst Redis so lange, bis der Arbeitsspeicher des Hosts voll ist. Der Linux-OOM-Killer beendet\ndann den Redis-Prozess — oder schlimmer: den MySQL-Prozess, weil der mehr RAM belegt.",[59,583,584],{},[85,585,87],{},[89,587,588,591],{},[92,589,590],{},"Unkontrollierter Speicherverbrauch führt zu Systeminstabilität.",[92,592,593],{},"Swap-Nutzung macht Redis um Größenordnungen langsamer. Redis und Swap vertragen sich nicht — eine Redis-Instanz, die\nswappt, ist langsamer als ein Cache, der direkt auf MariaDB liegt.",[59,595,596],{},[85,597,503],{},[59,599,600],{},"Faustregel für einen typischen Shopware-Shop:",[89,602,603,609],{},[92,604,605,608],{},[85,606,607],{},"Cache-Instanz (ephemeral):"," 1–2 GB (je nach Produktanzahl und Kategorientiefe)",[92,610,611,614],{},[85,612,613],{},"Persistent-Instanz:"," 128–256 MB (abhängig von gleichzeitigen Nutzern und Warenkörben)",[59,616,617],{},"Immer explizit setzen:",[123,619,621],{"className":506,"code":620,"language":508,"meta":128,"style":128},"maxmemory 2gb\nmaxmemory-policy allkeys-lru  # für ephemeral\n",[96,622,623,628],{"__ignoreMap":128},[132,624,625],{"class":134,"line":135},[132,626,627],{},"maxmemory 2gb\n",[132,629,630],{"class":134,"line":142},[132,631,632],{},"maxmemory-policy allkeys-lru  # für ephemeral\n",[59,634,635,636,639],{},"Und überwachen. Ein ",[96,637,638],{},"INFO memory","-Check gehört ins Monitoring:",[123,641,645],{"className":642,"code":643,"language":644,"meta":128,"style":128},"language-bash shiki shiki-themes github-light github-dark","redis-cli -p 6379 INFO memory | grep used_memory_human\nredis-cli -p 6379 INFO memory | grep maxmemory_human\n","bash",[96,646,647,675],{"__ignoreMap":128},[132,648,649,653,657,660,663,666,669,672],{"class":134,"line":135},[132,650,652],{"class":651},"sScJk","redis-cli",[132,654,656],{"class":655},"sj4cs"," -p",[132,658,659],{"class":655}," 6379",[132,661,662],{"class":186}," INFO",[132,664,665],{"class":186}," memory",[132,667,668],{"class":334}," |",[132,670,671],{"class":651}," grep",[132,673,674],{"class":186}," used_memory_human\n",[132,676,677,679,681,683,685,687,689,691],{"class":134,"line":142},[132,678,652],{"class":651},[132,680,656],{"class":655},[132,682,659],{"class":655},[132,684,662],{"class":186},[132,686,665],{"class":186},[132,688,668],{"class":334},[132,690,671],{"class":651},[132,692,693],{"class":186}," maxmemory_human\n",[72,695],{},[75,697,699],{"id":698},"fehler-4-falsche-eviction-policy","Fehler 4: Falsche Eviction-Policy",[59,701,702],{},"Redis bietet verschiedene Eviction-Policies. Die Wahl hat direkten Einfluss auf das Verhalten des Shops.",[59,704,705],{},[85,706,707],{},"Häufige Fehlkonfiguration:",[89,709,710,719,728],{},[92,711,712,715,716,718],{},[96,713,714],{},"noeviction"," auf der Cache-Instanz → Redis lehnt Schreiboperationen ab, sobald ",[96,717,98],{}," erreicht ist. Shopware\nwirft Fehler, der Shop steht.",[92,720,721,724,725,727],{},[96,722,723],{},"allkeys-random"," statt ",[96,726,271],{}," → Redis löscht zufällige Keys statt des am längsten nicht genutzten. Häufig\nangefragte Cache-Einträge werden gelöscht, selten gebrauchte bleiben.",[92,729,730,732],{},[96,731,271],{}," auf der persistenten Instanz → Redis kann Number-Range-Keys löschen, die kein TTL haben. Das führt zu\ndoppelt vergebenen Bestellnummern.",[59,734,735],{},[85,736,737],{},"Die richtige Zuordnung (laut Shopware-Docs):",[227,739,740,752],{},[230,741,742],{},[233,743,744,746,749],{},[236,745,238],{},[236,747,748],{},"Policy",[236,750,751],{},"Warum",[249,753,754,766],{},[233,755,756,759,763],{},[254,757,758],{},"Ephemeral (Cache)",[254,760,761],{},[96,762,271],{},[254,764,765],{},"Älteste Einträge fliegen zuerst, neue werden immer geschrieben",[233,767,768,771,775],{},[254,769,770],{},"Persistent (Sessions, Carts, Number-Ranges)",[254,772,773],{},[96,774,292],{},[254,776,777],{},"Nur Keys mit TTL werden evictet; Keys ohne TTL (Number-Ranges) bleiben erhalten",[59,779,780,781,783],{},"Der Unterschied ist subtil, aber kritisch: ",[96,782,292],{}," schützt alle Keys ohne explizites TTL vor dem Löschen.\nSessions und Warenkörbe haben TTLs und können bei Speicherdruck evictet werden. Number-Ranges haben kein TTL und bleiben\nsicher.",[72,785],{},[75,787,789],{"id":788},"fehler-5-shopware-seitige-konfiguration-unvollständig","Fehler 5: Shopware-seitige Konfiguration unvollständig",[59,791,792],{},"Redis läuft, die Verbindung steht — aber Shopware nutzt es nicht für alle Subsysteme, weil die Konfiguration nur\nteilweise gemacht wurde.",[59,794,795],{},[85,796,797],{},"Typische Fehler:",[89,799,800,803,810],{},[92,801,802],{},"Nur den App-Cache auf Redis, aber Session-Handler, Cart-Storage, Locks und Increment vergessen.",[92,804,805,806,809],{},"Lock-DSN zeigt noch auf ",[96,807,808],{},"flock"," statt Redis → bei Horizontal-Scaling knallt es.",[92,811,812],{},"Increment-Storage bleibt auf MySQL → unnötige DB-Last durch Locking-Queries.",[59,814,815],{},"Vollständige Konfiguration mit benannten Connections (≥ 6.6.8.0):",[123,817,819],{"className":125,"code":818,"language":127,"meta":128,"style":128},"# config\u002Fpackages\u002Fshopware.yaml\nshopware:\n  redis:\n    connections:\n      ephemeral:\n        dsn: '%env(REDIS_EPHEMERAL)%'\n      persistent:\n        dsn: '%env(REDIS_PERSISTENT)%'\n\n  cache:\n    invalidation:\n      delay: 0\n      count: 150\n      delay_options:\n        storage: redis\n        connection: 'ephemeral'\n\n  cart:\n    redis_url: '%env(REDIS_PERSISTENT)%'\n\n  number_range:\n    redis_url: '%env(REDIS_PERSISTENT)%'\n\n  increment:\n    message_queue:\n      type: redis\n      config:\n        url: '%env(REDIS_EPHEMERAL)%'\n    user_activity:\n      type: redis\n      config:\n        url: '%env(REDIS_EPHEMERAL)%'\n",[96,820,821,825,831,837,843,849,857,863,871,875,882,889,899,909,916,926,936,940,947,956,960,967,975,980,988,996,1006,1014,1024,1032,1041,1048],{"__ignoreMap":128},[132,822,823],{"class":134,"line":135},[132,824,139],{"class":138},[132,826,827,829],{"class":134,"line":142},[132,828,146],{"class":145},[132,830,150],{"class":149},[132,832,833,835],{"class":134,"line":153},[132,834,156],{"class":145},[132,836,150],{"class":149},[132,838,839,841],{"class":134,"line":161},[132,840,164],{"class":145},[132,842,150],{"class":149},[132,844,845,847],{"class":134,"line":169},[132,846,172],{"class":145},[132,848,150],{"class":149},[132,850,851,853,855],{"class":134,"line":177},[132,852,180],{"class":145},[132,854,183],{"class":149},[132,856,187],{"class":186},[132,858,859,861],{"class":134,"line":190},[132,860,193],{"class":145},[132,862,150],{"class":149},[132,864,865,867,869],{"class":134,"line":198},[132,866,180],{"class":145},[132,868,183],{"class":149},[132,870,205],{"class":186},[132,872,873],{"class":134,"line":358},[132,874,380],{"emptyLinePlaceholder":379},[132,876,877,880],{"class":134,"line":364},[132,878,879],{"class":145},"  cache",[132,881,150],{"class":149},[132,883,884,887],{"class":134,"line":376},[132,885,886],{"class":145},"    invalidation",[132,888,150],{"class":149},[132,890,891,894,896],{"class":134,"line":383},[132,892,893],{"class":145},"      delay",[132,895,183],{"class":149},[132,897,898],{"class":655},"0\n",[132,900,901,904,906],{"class":134,"line":391},[132,902,903],{"class":145},"      count",[132,905,183],{"class":149},[132,907,908],{"class":655},"150\n",[132,910,911,914],{"class":134,"line":400},[132,912,913],{"class":145},"      delay_options",[132,915,150],{"class":149},[132,917,918,921,923],{"class":134,"line":409},[132,919,920],{"class":145},"        storage",[132,922,183],{"class":149},[132,924,925],{"class":186},"redis\n",[132,927,928,931,933],{"class":134,"line":414},[132,929,930],{"class":145},"        connection",[132,932,183],{"class":149},[132,934,935],{"class":186},"'ephemeral'\n",[132,937,938],{"class":134,"line":420},[132,939,380],{"emptyLinePlaceholder":379},[132,941,942,945],{"class":134,"line":426},[132,943,944],{"class":145},"  cart",[132,946,150],{"class":149},[132,948,949,952,954],{"class":134,"line":432},[132,950,951],{"class":145},"    redis_url",[132,953,183],{"class":149},[132,955,205],{"class":186},[132,957,958],{"class":134,"line":438},[132,959,380],{"emptyLinePlaceholder":379},[132,961,962,965],{"class":134,"line":444},[132,963,964],{"class":145},"  number_range",[132,966,150],{"class":149},[132,968,969,971,973],{"class":134,"line":451},[132,970,951],{"class":145},[132,972,183],{"class":149},[132,974,205],{"class":186},[132,976,978],{"class":134,"line":977},23,[132,979,380],{"emptyLinePlaceholder":379},[132,981,983,986],{"class":134,"line":982},24,[132,984,985],{"class":145},"  increment",[132,987,150],{"class":149},[132,989,991,994],{"class":134,"line":990},25,[132,992,993],{"class":145},"    message_queue",[132,995,150],{"class":149},[132,997,999,1002,1004],{"class":134,"line":998},26,[132,1000,1001],{"class":145},"      type",[132,1003,183],{"class":149},[132,1005,925],{"class":186},[132,1007,1009,1012],{"class":134,"line":1008},27,[132,1010,1011],{"class":145},"      config",[132,1013,150],{"class":149},[132,1015,1017,1020,1022],{"class":134,"line":1016},28,[132,1018,1019],{"class":145},"        url",[132,1021,183],{"class":149},[132,1023,187],{"class":186},[132,1025,1027,1030],{"class":134,"line":1026},29,[132,1028,1029],{"class":145},"    user_activity",[132,1031,150],{"class":149},[132,1033,1035,1037,1039],{"class":134,"line":1034},30,[132,1036,1001],{"class":145},[132,1038,183],{"class":149},[132,1040,925],{"class":186},[132,1042,1044,1046],{"class":134,"line":1043},31,[132,1045,1011],{"class":145},[132,1047,150],{"class":149},[132,1049,1051,1053,1055],{"class":134,"line":1050},32,[132,1052,1019],{"class":145},[132,1054,183],{"class":149},[132,1056,187],{"class":186},[123,1058,1060],{"className":125,"code":1059,"language":127,"meta":128,"style":128},"# config\u002Fpackages\u002Fprod\u002Fframework.yaml\nframework:\n  cache:\n    default_redis_provider: '%env(REDIS_EPHEMERAL)%'\n    pools:\n      cache.object:\n        adapter: cache.adapter.redis\n        tags: true\n      cache.http:\n        adapter: cache.adapter.redis\n        tags: true\n\n  session:\n    handler_id: '%env(REDIS_PERSISTENT)%'\n\n  lock:\n    main: '%env(REDIS_EPHEMERAL)%'\n",[96,1061,1062,1067,1074,1080,1089,1096,1103,1113,1123,1130,1138,1146,1150,1157,1166,1170,1177],{"__ignoreMap":128},[132,1063,1064],{"class":134,"line":135},[132,1065,1066],{"class":138},"# config\u002Fpackages\u002Fprod\u002Fframework.yaml\n",[132,1068,1069,1072],{"class":134,"line":142},[132,1070,1071],{"class":145},"framework",[132,1073,150],{"class":149},[132,1075,1076,1078],{"class":134,"line":153},[132,1077,879],{"class":145},[132,1079,150],{"class":149},[132,1081,1082,1085,1087],{"class":134,"line":161},[132,1083,1084],{"class":145},"    default_redis_provider",[132,1086,183],{"class":149},[132,1088,187],{"class":186},[132,1090,1091,1094],{"class":134,"line":169},[132,1092,1093],{"class":145},"    pools",[132,1095,150],{"class":149},[132,1097,1098,1101],{"class":134,"line":177},[132,1099,1100],{"class":145},"      cache.object",[132,1102,150],{"class":149},[132,1104,1105,1108,1110],{"class":134,"line":190},[132,1106,1107],{"class":145},"        adapter",[132,1109,183],{"class":149},[132,1111,1112],{"class":186},"cache.adapter.redis\n",[132,1114,1115,1118,1120],{"class":134,"line":198},[132,1116,1117],{"class":145},"        tags",[132,1119,183],{"class":149},[132,1121,1122],{"class":655},"true\n",[132,1124,1125,1128],{"class":134,"line":358},[132,1126,1127],{"class":145},"      cache.http",[132,1129,150],{"class":149},[132,1131,1132,1134,1136],{"class":134,"line":364},[132,1133,1107],{"class":145},[132,1135,183],{"class":149},[132,1137,1112],{"class":186},[132,1139,1140,1142,1144],{"class":134,"line":376},[132,1141,1117],{"class":145},[132,1143,183],{"class":149},[132,1145,1122],{"class":655},[132,1147,1148],{"class":134,"line":383},[132,1149,380],{"emptyLinePlaceholder":379},[132,1151,1152,1155],{"class":134,"line":391},[132,1153,1154],{"class":145},"  session",[132,1156,150],{"class":149},[132,1158,1159,1162,1164],{"class":134,"line":400},[132,1160,1161],{"class":145},"    handler_id",[132,1163,183],{"class":149},[132,1165,205],{"class":186},[132,1167,1168],{"class":134,"line":409},[132,1169,380],{"emptyLinePlaceholder":379},[132,1171,1172,1175],{"class":134,"line":414},[132,1173,1174],{"class":145},"  lock",[132,1176,150],{"class":149},[132,1178,1179,1182,1184],{"class":134,"line":420},[132,1180,1181],{"class":145},"    main",[132,1183,183],{"class":149},[132,1185,187],{"class":186},[59,1187,1188,1189,1192],{},"Wer den Increment-Storage nicht braucht (keine Nutzung der Admin-Live-Statistiken), kann ihn auf ",[96,1190,1191],{},"array"," setzen und\nspart sich die Last komplett:",[123,1194,1196],{"className":125,"code":1195,"language":127,"meta":128,"style":128},"shopware:\n  increment:\n    message_queue:\n      type: array\n    user_activity:\n      type: array\n",[96,1197,1198,1204,1210,1216,1225,1231],{"__ignoreMap":128},[132,1199,1200,1202],{"class":134,"line":135},[132,1201,146],{"class":145},[132,1203,150],{"class":149},[132,1205,1206,1208],{"class":134,"line":142},[132,1207,985],{"class":145},[132,1209,150],{"class":149},[132,1211,1212,1214],{"class":134,"line":153},[132,1213,993],{"class":145},[132,1215,150],{"class":149},[132,1217,1218,1220,1222],{"class":134,"line":161},[132,1219,1001],{"class":145},[132,1221,183],{"class":149},[132,1223,1224],{"class":186},"array\n",[132,1226,1227,1229],{"class":134,"line":169},[132,1228,1029],{"class":145},[132,1230,150],{"class":149},[132,1232,1233,1235,1237],{"class":134,"line":177},[132,1234,1001],{"class":145},[132,1236,183],{"class":149},[132,1238,1224],{"class":186},[72,1240],{},[75,1242,1244],{"id":1243},"fehler-6-persistent1-falsch-verstanden","Fehler 6: ?persistent=1 falsch verstanden",[59,1246,1247],{},"Ein Klassiker, den man in vielen Tutorials sieht:",[123,1249,1251],{"className":125,"code":1250,"language":127,"meta":128,"style":128},"shopware:\n  cart:\n    redis_url: 'redis:\u002F\u002Fredis:6380?persistent=1'\n",[96,1252,1253,1259,1265],{"__ignoreMap":128},[132,1254,1255,1257],{"class":134,"line":135},[132,1256,146],{"class":145},[132,1258,150],{"class":149},[132,1260,1261,1263],{"class":134,"line":142},[132,1262,944],{"class":145},[132,1264,150],{"class":149},[132,1266,1267,1269,1271],{"class":134,"line":153},[132,1268,951],{"class":145},[132,1270,183],{"class":149},[132,1272,1273],{"class":186},"'redis:\u002F\u002Fredis:6380?persistent=1'\n",[59,1275,1276,1277,1280,1281,1284,1285,1288],{},"Der Parameter ",[96,1278,1279],{},"?persistent=1"," hat ",[85,1282,1283],{},"nichts mit der Datenpersistenz"," zu tun. Er aktiviert ",[85,1286,1287],{},"Persistent Connections"," —\nalso Connection Pooling auf PHP-Seite. Damit wird die TCP-Verbindung zu Redis über mehrere Requests hinweg offen\ngehalten, statt sie bei jedem Request neu aufzubauen.",[59,1290,1291],{},[85,1292,1293],{},"Warum die Verwechslung schadet:",[89,1295,1296,1302],{},[92,1297,1298,1299,1301],{},"Entwickler setzen ",[96,1300,1279],{}," und glauben, damit sei die Datenpersistenz geregelt. Die eigentliche\nRedis-Persistenz (RDB\u002FAOF) wird nicht konfiguriert. Nach einem Redis-Neustart sind alle Warenkörbe weg.",[92,1303,1304,1305,1307],{},"Umgekehrt: ",[96,1306,1279],{}," wird weggelassen, weil man keine Persistenz will (Cache-Instanz). Dabei hätte Connection\nPooling dort die beste Wirkung, weil Cache-Requests häufig sind.",[59,1309,1310],{},[85,1311,503],{},[89,1313,1314,1328],{},[92,1315,1316,1319,1320,1323,1324,1327],{},[85,1317,1318],{},"Datenpersistenz"," wird auf Redis-Server-Seite konfiguriert (",[96,1321,1322],{},"save",", ",[96,1325,1326],{},"appendonly",")",[92,1329,1330,1333,1334,1336],{},[85,1331,1332],{},"Connection Pooling"," wird in der DSN konfiguriert (",[96,1335,1279],{},") — sinnvoll für beide Instanzen",[72,1338],{},[75,1340,1342],{"id":1341},"fehler-7-cart-migration-vergessen","Fehler 7: Cart-Migration vergessen",[59,1344,1345],{},"Shopware speichert Warenkörbe standardmäßig in MySQL. Der Umstieg auf Redis erfordert eine explizite Migration, sonst\nsind bestehende Warenkörbe nach dem Config-Wechsel weg.",[123,1347,1349],{"className":642,"code":1348,"language":644,"meta":128,"style":128},"# Warenkörbe von MySQL zu Redis migrieren\nbin\u002Fconsole cart:migrate\n",[96,1350,1351,1356],{"__ignoreMap":128},[132,1352,1353],{"class":134,"line":135},[132,1354,1355],{"class":138},"# Warenkörbe von MySQL zu Redis migrieren\n",[132,1357,1358,1361],{"class":134,"line":142},[132,1359,1360],{"class":651},"bin\u002Fconsole",[132,1362,1363],{"class":186}," cart:migrate\n",[59,1365,1366,1367,1370,1371,1373],{},"Das Kommando liest die Warenkörbe aus der Datenbank und schreibt sie in die konfigurierte Redis-Instanz. Es nutzt\nautomatisch die ",[96,1368,1369],{},"redis_url"," aus der ",[96,1372,120],{},". Der Befehl ist idempotent und kann im Deployment-Script ausgeführt\nwerden.",[59,1375,1376],{},"Ohne diesen Schritt verlieren alle Kunden mit aktiven Warenkörben ihre Artikel nach dem Switch.",[72,1378],{},[75,1380,1382],{"id":1381},"fehler-8-kein-monitoring","Fehler 8: Kein Monitoring",[59,1384,1385],{},"Redis läuft still vor sich hin. Niemand merkt, dass die Hit-Rate bei 12 % liegt, der Speicher zu 98 % voll ist oder die\nLatenz bei 50 ms statt 0,2 ms liegt.",[59,1387,1388],{},[85,1389,1390],{},"Mindest-Monitoring:",[123,1392,1394],{"className":642,"code":1393,"language":644,"meta":128,"style":128},"# Hit-Rate prüfen\nredis-cli -p 6379 INFO stats | grep -E \"keyspace_hits|keyspace_misses\"\n\n# Auslastung\nredis-cli -p 6379 INFO memory | grep used_memory_peak_human\n\n# Verbundene Clients\nredis-cli -p 6379 INFO clients | grep connected_clients\n\n# Slow-Log\nredis-cli -p 6379 SLOWLOG GET 10\n",[96,1395,1396,1401,1424,1428,1433,1452,1456,1461,1481,1485,1490],{"__ignoreMap":128},[132,1397,1398],{"class":134,"line":135},[132,1399,1400],{"class":138},"# Hit-Rate prüfen\n",[132,1402,1403,1405,1407,1409,1411,1414,1416,1418,1421],{"class":134,"line":142},[132,1404,652],{"class":651},[132,1406,656],{"class":655},[132,1408,659],{"class":655},[132,1410,662],{"class":186},[132,1412,1413],{"class":186}," stats",[132,1415,668],{"class":334},[132,1417,671],{"class":651},[132,1419,1420],{"class":655}," -E",[132,1422,1423],{"class":186}," \"keyspace_hits|keyspace_misses\"\n",[132,1425,1426],{"class":134,"line":153},[132,1427,380],{"emptyLinePlaceholder":379},[132,1429,1430],{"class":134,"line":161},[132,1431,1432],{"class":138},"# Auslastung\n",[132,1434,1435,1437,1439,1441,1443,1445,1447,1449],{"class":134,"line":169},[132,1436,652],{"class":651},[132,1438,656],{"class":655},[132,1440,659],{"class":655},[132,1442,662],{"class":186},[132,1444,665],{"class":186},[132,1446,668],{"class":334},[132,1448,671],{"class":651},[132,1450,1451],{"class":186}," used_memory_peak_human\n",[132,1453,1454],{"class":134,"line":177},[132,1455,380],{"emptyLinePlaceholder":379},[132,1457,1458],{"class":134,"line":190},[132,1459,1460],{"class":138},"# Verbundene Clients\n",[132,1462,1463,1465,1467,1469,1471,1474,1476,1478],{"class":134,"line":198},[132,1464,652],{"class":651},[132,1466,656],{"class":655},[132,1468,659],{"class":655},[132,1470,662],{"class":186},[132,1472,1473],{"class":186}," clients",[132,1475,668],{"class":334},[132,1477,671],{"class":651},[132,1479,1480],{"class":186}," connected_clients\n",[132,1482,1483],{"class":134,"line":358},[132,1484,380],{"emptyLinePlaceholder":379},[132,1486,1487],{"class":134,"line":364},[132,1488,1489],{"class":138},"# Slow-Log\n",[132,1491,1492,1494,1496,1498,1501,1504],{"class":134,"line":376},[132,1493,652],{"class":651},[132,1495,656],{"class":655},[132,1497,659],{"class":655},[132,1499,1500],{"class":186}," SLOWLOG",[132,1502,1503],{"class":186}," GET",[132,1505,1506],{"class":655}," 10\n",[59,1508,1509,1510,1512],{},"Die Hit-Rate für die Cache-Instanz sollte über 80 % liegen. Liegt sie darunter, stimmt entweder das TTL nicht, die\nEviction-Policy ist falsch, oder ",[96,1511,98],{}," ist zu niedrig und Redis räumt ständig auf.",[59,1514,1515,1516,1519],{},"Für ein sauberes Setup: Prometheus mit dem ",[96,1517,1518],{},"redis_exporter"," und ein Grafana-Dashboard. Die Investition von 30 Minuten\nEinrichtung spart Stunden Debugging.",[72,1521],{},[75,1523,1525],{"id":1524},"fehler-9-tcp-konfiguration-ignoriert","Fehler 9: TCP-Konfiguration ignoriert",[59,1527,1528],{},"Redis und Shopware laufen auf demselben Host, kommunizieren aber über TCP statt Unix-Socket. Oder Redis läuft auf einem\nseparaten Host, aber TCP-Keepalive und Timeout sind auf Default.",[59,1530,1531],{},[85,1532,1533],{},"Wenn Redis auf demselben Host läuft:",[59,1535,1536],{},"Unix-Socket statt TCP spart den gesamten TCP-Stack-Overhead. Das sind bei hohem Durchsatz messbare Mikrosekunden pro\nRequest:",[123,1538,1540],{"className":506,"code":1539,"language":508,"meta":128,"style":128},"# redis-cache.conf\nunixsocket \u002Fvar\u002Frun\u002Fredis\u002Fredis-cache.sock\nunixsocketperm 770\nport 0\n",[96,1541,1542,1547,1552,1557],{"__ignoreMap":128},[132,1543,1544],{"class":134,"line":135},[132,1545,1546],{},"# redis-cache.conf\n",[132,1548,1549],{"class":134,"line":142},[132,1550,1551],{},"unixsocket \u002Fvar\u002Frun\u002Fredis\u002Fredis-cache.sock\n",[132,1553,1554],{"class":134,"line":153},[132,1555,1556],{},"unixsocketperm 770\n",[132,1558,1559],{"class":134,"line":161},[132,1560,1561],{},"port 0\n",[123,1563,1565],{"className":208,"code":1564,"language":210,"meta":128,"style":128},"REDIS_EPHEMERAL=redis:\u002F\u002F\u002Fvar\u002Frun\u002Fredis\u002Fredis-cache.sock\n",[96,1566,1567],{"__ignoreMap":128},[132,1568,1569],{"class":134,"line":135},[132,1570,1564],{},[59,1572,1573],{},[85,1574,1575],{},"Wenn Redis remote läuft:",[123,1577,1579],{"className":506,"code":1578,"language":508,"meta":128,"style":128},"tcp-keepalive 60\ntimeout 300\ntcp-backlog 511\n",[96,1580,1581,1586,1591],{"__ignoreMap":128},[132,1582,1583],{"class":134,"line":135},[132,1584,1585],{},"tcp-keepalive 60\n",[132,1587,1588],{"class":134,"line":142},[132,1589,1590],{},"timeout 300\n",[132,1592,1593],{"class":134,"line":153},[132,1594,1595],{},"tcp-backlog 511\n",[59,1597,578,1598,1601],{},[96,1599,1600],{},"tcp-keepalive"," können tote Verbindungen minutenlang offen bleiben und den Connection-Pool blockieren.",[59,1603,1604,1605,1608],{},"Bei Nutzung eines Redis-Clusters zusätzlich in der ",[96,1606,1607],{},"php.ini"," setzen:",[123,1610,1614],{"className":1611,"code":1612,"language":1613,"meta":128,"style":128},"language-ini shiki shiki-themes github-light github-dark","redis.clusters.cache_slots=1\n","ini",[96,1615,1616],{"__ignoreMap":128},[132,1617,1618],{"class":134,"line":135},[132,1619,1612],{},[59,1621,1622],{},"Das überspringt den Cluster-Node-Lookup bei jeder Verbindung.",[72,1624],{},[75,1626,1628],{"id":1627},"zusammenfassung","Zusammenfassung",[227,1630,1631,1644],{},[230,1632,1633],{},[233,1634,1635,1638,1641],{},[236,1636,1637],{},"Fehler",[236,1639,1640],{},"Auswirkung",[236,1642,1643],{},"Fix",[249,1645,1646,1657,1673,1686,1702,1713,1726,1739,1750],{},[233,1647,1648,1651,1654],{},[254,1649,1650],{},"Eine Instanz für alles",[254,1652,1653],{},"Eviction löscht Sessions\u002FCarts",[254,1655,1656],{},"Getrennte ephemeral\u002Fpersistent Instanzen",[233,1658,1659,1662,1665],{},[254,1660,1661],{},"Persistenz auf Cache",[254,1663,1664],{},"OOM-Kill, veralteter Cache nach Restart",[254,1666,1667,1323,1670],{},[96,1668,1669],{},"save \"\"",[96,1671,1672],{},"appendonly no",[233,1674,1675,1680,1683],{},[254,1676,1677,1678],{},"Kein ",[96,1679,98],{},[254,1681,1682],{},"OOM-Kill, Swap-Nutzung",[254,1684,1685],{},"Explizites Limit setzen",[233,1687,1688,1691,1694],{},[254,1689,1690],{},"Falsche Eviction-Policy",[254,1692,1693],{},"Shop-Fehler oder Datenverlust",[254,1695,1696,1698,1699,1701],{},[96,1697,271],{}," (Cache), ",[96,1700,292],{}," (persistent)",[233,1703,1704,1707,1710],{},[254,1705,1706],{},"Unvollständige Shopware-Config",[254,1708,1709],{},"Redis läuft, wird aber nicht genutzt",[254,1711,1712],{},"Alle Subsysteme konfigurieren",[233,1714,1715,1720,1723],{},[254,1716,1717,1719],{},[96,1718,1279],{}," verwechselt",[254,1721,1722],{},"Keine Datenpersistenz trotz Annahme",[254,1724,1725],{},"Server-seitige Persistenz konfigurieren",[233,1727,1728,1731,1734],{},[254,1729,1730],{},"Cart-Migration vergessen",[254,1732,1733],{},"Warenkörbe weg nach Redis-Umstieg",[254,1735,1736],{},[96,1737,1738],{},"bin\u002Fconsole cart:migrate",[233,1740,1741,1744,1747],{},[254,1742,1743],{},"Kein Monitoring",[254,1745,1746],{},"Probleme bleiben unentdeckt",[254,1748,1749],{},"Hit-Rate, Memory, Slow-Log überwachen",[233,1751,1752,1755,1758],{},[254,1753,1754],{},"TCP statt Socket",[254,1756,1757],{},"Unnötiger Overhead",[254,1759,1760],{},"Unix-Socket bei Co-Location",[59,1762,1763],{},"Redis ist ein mächtiges Werkzeug — aber nur, wenn die Konfiguration zum Use-Case passt. Ein falsch konfiguriertes Redis\nist schlimmer als kein Redis, weil es eine zusätzliche Fehlerquelle einführt und dabei den Eindruck erweckt, die\nPerformance-Arbeit sei bereits erledigt.",[1765,1766,1767],"style",{},"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 .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":128,"searchDepth":142,"depth":142,"links":1769},[1770,1771,1772,1773,1774,1775,1776,1777,1778,1779],{"id":77,"depth":142,"text":78},{"id":471,"depth":142,"text":472},{"id":574,"depth":142,"text":575},{"id":698,"depth":142,"text":699},{"id":788,"depth":142,"text":789},{"id":1243,"depth":142,"text":1244},{"id":1341,"depth":142,"text":1342},{"id":1381,"depth":142,"text":1382},{"id":1524,"depth":142,"text":1525},{"id":1627,"depth":142,"text":1628},"Häufige Redis-Fehlkonfigurationen in Shopware 6, die Performance kosten statt sie zu verbessern – von Persistenz auf Cache-Instanzen bis fehlenden Eviction-Policies – und wie man sie behebt.","md",{},"\u002Fde\u002Fblog\u002Fshopware-6-redis-configuration-mistakes","2026-04-02 08:00:00",null,[1787],{"headline":50,"mainEntityOfPage":1788,"author":1790,"publisher":1795,"datePublished":1796,"@type":1797},{"@id":1789},"#webpage",{"@id":1791,"name":1792,"url":1793,"@type":1794},"#identity","Kickbyte GmbH","https:\u002F\u002Fkickbyte.de","Organization",{"@id":1791,"name":1792,"url":1793,"@type":1794},"2026-04-02T08:00:00Z","BlogPosting",{"title":50,"description":1780,"ogTitle":1799,"ogDescription":1780,"robots":1800},"Shopware 6 & Redis: Wenn falsche Konfiguration mehr schadet als nutzt - Kickbyte","index,follow",{"loc":1783,"lastmod":1802,"changefreq":1803,"priority":1804},"2026-04-02","monthly",0.8,"de\u002Fblog\u002Fshopware-6-redis-configuration-mistakes",[1807,1808,1809,1810,1811],"Shopware","Redis","Performance","DevOps","E-Commerce","CiewqOXeJOkhYBlDb4ZB9rvbR_WEA1CvfybJoQ07CyM",1775305334170]