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