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