[{"data":1,"prerenderedAt":1857},["ShallowReactive",2],{"navigation:en":3,"auto-image:entries:\u002Fen\u002Fblog\u002Fshopware-6-redis-configuration-mistakes":55,"blog:en:\u002Fen\u002Fblog\u002Fshopware-6-redis-configuration-mistakes":56,"content-translation-map":1819},[4],{"title":5,"path":6,"stem":7,"children":8,"page":54},"En","\u002Fen","en",[9],{"title":10,"path":11,"stem":12,"children":13,"page":54},"Services","\u002Fen\u002Fservices","en\u002Fservices",[14,19,24,29,34,39,44,49],{"title":15,"path":16,"stem":17,"translationKey":18,"icon":18},"AI-Powered Content Production","\u002Fen\u002Fservices\u002Fai-content-creation","en\u002Fservices\u002Fai-content-creation","ai-content-creation",{"title":20,"path":21,"stem":22,"translationKey":23,"icon":23},"eCommerce Development","\u002Fen\u002Fservices\u002Fecommerce","en\u002Fservices\u002Fecommerce","ecommerce",{"title":25,"path":26,"stem":27,"translationKey":28,"icon":28},"EDI Integration","\u002Fen\u002Fservices\u002Fedi-integration","en\u002Fservices\u002Fedi-integration","edi-integration",{"title":30,"path":31,"stem":32,"translationKey":33,"icon":33},"ERP Integration","\u002Fen\u002Fservices\u002Ferp-integration","en\u002Fservices\u002Ferp-integration","erp-integration",{"title":35,"path":36,"stem":37,"translationKey":38,"icon":38},"Custom Development","\u002Fen\u002Fservices\u002Findividual-development","en\u002Fservices\u002Findividual-development","individual-development",{"title":40,"path":41,"stem":42,"translationKey":43,"icon":43},"System Integration","\u002Fen\u002Fservices\u002Fsystem-integration","en\u002Fservices\u002Fsystem-integration","system-integration",{"title":45,"path":46,"stem":47,"translationKey":48,"icon":48},"Migration & System Modernization","\u002Fen\u002Fservices\u002Fsystem-modernization-migration","en\u002Fservices\u002Fsystem-modernization-migration","system-modernization-migration",{"title":50,"path":51,"stem":52,"translationKey":53,"icon":53},"UX\u002FUI Design","\u002Fen\u002Fservices\u002Fux-ui-design","en\u002Fservices\u002Fux-ui-design","ux-ui-design",false,{},{"id":57,"title":58,"body":59,"description":1785,"draft":54,"extension":1786,"meta":1787,"navigation":386,"path":1788,"publishAt":1789,"robots":1790,"schemaOrg":1791,"seo":1803,"sitemap":1806,"stem":1810,"tags":1811,"translationKey":1817,"__hash__":1818},"blog_en\u002Fen\u002Fblog\u002Fshopware-6-redis-configuration-mistakes.md","Shopware 6 & Redis: How Misconfigured Instances Hurt More Than They Help",{"type":60,"value":61,"toc":1773},"minimark",[62,66,75,78,81,86,89,95,117,122,129,213,230,233,300,303,465,474,476,480,487,491,506,511,533,536,546,576,578,582,588,592,600,604,607,621,624,639,646,700,702,706,709,714,739,744,784,790,792,796,799,804,819,822,1063,1192,1199,1245,1247,1251,1254,1280,1294,1299,1313,1317,1342,1344,1348,1351,1369,1379,1382,1384,1388,1391,1396,1512,1518,1525,1527,1531,1534,1539,1542,1567,1576,1581,1601,1608,1614,1625,1628,1630,1634,1766,1769],[63,64,58],"h1",{"id":65},"shopware-6-redis-how-misconfigured-instances-hurt-more-than-they-help",[67,68,69,70,74],"p",{},"Redis is the go-to tool in ",[71,72,73],"nuxt-link",{"to":21},"Shopware 6"," for moving cache, sessions, and HTTP cache out of the database or file system,\ndrastically improving performance. In practice, however, we regularly see setups where Redis becomes the bottleneck —\nnot because Redis is slow, but because it's misconfigured.",[67,76,77],{},"This article covers the most common mistakes and how to avoid them.",[79,80],"hr",{},[82,83,85],"h2",{"id":84},"mistake-1-a-single-redis-instance-for-everything","Mistake 1: A Single Redis Instance for Everything",[67,87,88],{},"This is the classic. A single Redis instance on port 6379 handles cache, sessions, HTTP cache, cart persistence, number\nranges, locks, increment storage, and the message queue.",[67,90,91],{},[92,93,94],"strong",{},"Why this hurts:",[96,97,98,107,114],"ul",{},[99,100,101,102,106],"li",{},"Cache data competes with session data for available memory. When ",[103,104,105],"code",{},"maxmemory"," kicks in and the eviction policy starts\nremoving keys, those keys could be sessions or shopping carts — customers get kicked out of checkout or lose their\ncart.",[99,108,109,110,113],{},"A careless ",[103,111,112],{},"FLUSHALL"," during debugging wipes everything at once — sessions, carts, number range states.",[99,115,116],{},"Different data types require different persistence and eviction strategies. Cache data is volatile; carts and number\nranges are not.",[67,118,119],{},[92,120,121],{},"Solution: At least two separate Redis instances — ephemeral and persistent.",[67,123,124,125,128],{},"Since Shopware 6.6.8.0, named Redis connections have been supported directly in ",[103,126,127],{},"shopware.yaml",":",[130,131,136],"pre",{"className":132,"code":133,"language":134,"meta":135,"style":135},"language-yaml shiki shiki-themes github-light github-dark","# config\u002Fpackages\u002Fshopware.yaml\nshopware:\n  redis:\n    connections:\n      ephemeral:\n        dsn: '%env(REDIS_EPHEMERAL)%'\n      persistent:\n        dsn: '%env(REDIS_PERSISTENT)%'\n","yaml","",[103,137,138,147,158,166,174,182,195,203],{"__ignoreMap":135},[139,140,143],"span",{"class":141,"line":142},"line",1,[139,144,146],{"class":145},"sJ8bj","# config\u002Fpackages\u002Fshopware.yaml\n",[139,148,150,154],{"class":141,"line":149},2,[139,151,153],{"class":152},"s9eBZ","shopware",[139,155,157],{"class":156},"sVt8B",":\n",[139,159,161,164],{"class":141,"line":160},3,[139,162,163],{"class":152},"  redis",[139,165,157],{"class":156},[139,167,169,172],{"class":141,"line":168},4,[139,170,171],{"class":152},"    connections",[139,173,157],{"class":156},[139,175,177,180],{"class":141,"line":176},5,[139,178,179],{"class":152},"      ephemeral",[139,181,157],{"class":156},[139,183,185,188,191],{"class":141,"line":184},6,[139,186,187],{"class":152},"        dsn",[139,189,190],{"class":156},": ",[139,192,194],{"class":193},"sZZnC","'%env(REDIS_EPHEMERAL)%'\n",[139,196,198,201],{"class":141,"line":197},7,[139,199,200],{"class":152},"      persistent",[139,202,157],{"class":156},[139,204,206,208,210],{"class":141,"line":205},8,[139,207,187],{"class":152},[139,209,190],{"class":156},[139,211,212],{"class":193},"'%env(REDIS_PERSISTENT)%'\n",[130,214,218],{"className":215,"code":216,"language":217,"meta":135,"style":135},"language-dotenv shiki shiki-themes github-light github-dark","REDIS_EPHEMERAL=redis:\u002F\u002Fredis-cache:6379\nREDIS_PERSISTENT=redis:\u002F\u002Fredis-session:6380\n","dotenv",[103,219,220,225],{"__ignoreMap":135},[139,221,222],{"class":141,"line":142},[139,223,224],{},"REDIS_EPHEMERAL=redis:\u002F\u002Fredis-cache:6379\n",[139,226,227],{"class":141,"line":149},[139,228,229],{},"REDIS_PERSISTENT=redis:\u002F\u002Fredis-session:6380\n",[67,231,232],{},"These connection names can then be referenced across all subsystems — cache, sessions, cart, number ranges, locks,\nincrement storage.",[234,235,236,255],"table",{},[237,238,239],"thead",{},[240,241,242,246,249,252],"tr",{},[243,244,245],"th",{},"Instance",[243,247,248],{},"Purpose",[243,250,251],{},"Persistence",[243,253,254],{},"Eviction Policy",[256,257,258,279],"tbody",{},[240,259,260,266,269,274],{},[261,262,263],"td",{},[103,264,265],{},"ephemeral",[261,267,268],{},"App cache, HTTP cache, locks, increment",[261,270,271],{},[92,272,273],{},"Off",[261,275,276],{},[103,277,278],{},"allkeys-lru",[240,280,281,286,289,295],{},[261,282,283],{},[103,284,285],{},"persistent",[261,287,288],{},"Sessions, carts, number ranges",[261,290,291,294],{},[92,292,293],{},"On"," (RDB + AOF)",[261,296,297],{},[103,298,299],{},"volatile-lru",[67,301,302],{},"Docker Compose excerpt:",[130,304,306],{"className":132,"code":305,"language":134,"meta":135,"style":135},"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: [ ]  # No volume — cache is volatile\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",[103,307,308,315,322,332,343,348,353,358,363,369,381,388,396,405,414,419,425,431,437,443,449,456],{"__ignoreMap":135},[139,309,310,313],{"class":141,"line":142},[139,311,312],{"class":152},"services",[139,314,157],{"class":156},[139,316,317,320],{"class":141,"line":149},[139,318,319],{"class":152},"  redis-cache",[139,321,157],{"class":156},[139,323,324,327,329],{"class":141,"line":160},[139,325,326],{"class":152},"    image",[139,328,190],{"class":156},[139,330,331],{"class":193},"redis:7-alpine\n",[139,333,334,337,339],{"class":141,"line":168},[139,335,336],{"class":152},"    command",[139,338,190],{"class":156},[139,340,342],{"class":341},"szBVR",">\n",[139,344,345],{"class":141,"line":176},[139,346,347],{"class":193},"      redis-server\n",[139,349,350],{"class":141,"line":184},[139,351,352],{"class":193},"        --maxmemory 2gb\n",[139,354,355],{"class":141,"line":197},[139,356,357],{"class":193},"        --maxmemory-policy allkeys-lru\n",[139,359,360],{"class":141,"line":205},[139,361,362],{"class":193},"        --save \"\"\n",[139,364,366],{"class":141,"line":365},9,[139,367,368],{"class":193},"        --appendonly no\n",[139,370,372,375,378],{"class":141,"line":371},10,[139,373,374],{"class":152},"    volumes",[139,376,377],{"class":156},": [ ]  ",[139,379,380],{"class":145},"# No volume — cache is volatile\n",[139,382,384],{"class":141,"line":383},11,[139,385,387],{"emptyLinePlaceholder":386},true,"\n",[139,389,391,394],{"class":141,"line":390},12,[139,392,393],{"class":152},"  redis-session",[139,395,157],{"class":156},[139,397,399,401,403],{"class":141,"line":398},13,[139,400,326],{"class":152},[139,402,190],{"class":156},[139,404,331],{"class":193},[139,406,408,410,412],{"class":141,"line":407},14,[139,409,336],{"class":152},[139,411,190],{"class":156},[139,413,342],{"class":341},[139,415,417],{"class":141,"line":416},15,[139,418,347],{"class":193},[139,420,422],{"class":141,"line":421},16,[139,423,424],{"class":193},"        --maxmemory 256mb\n",[139,426,428],{"class":141,"line":427},17,[139,429,430],{"class":193},"        --maxmemory-policy volatile-lru\n",[139,432,434],{"class":141,"line":433},18,[139,435,436],{"class":193},"        --appendonly yes\n",[139,438,440],{"class":141,"line":439},19,[139,441,442],{"class":193},"        --appendfsync everysec\n",[139,444,446],{"class":141,"line":445},20,[139,447,448],{"class":193},"        --save \"3600 1\" --save \"300 100\"\n",[139,450,452,454],{"class":141,"line":451},21,[139,453,374],{"class":152},[139,455,157],{"class":156},[139,457,459,462],{"class":141,"line":458},22,[139,460,461],{"class":156},"      - ",[139,463,464],{"class":193},"redis-session-data:\u002Fdata\n",[67,466,467,468,470,471,473],{},"The Shopware docs recommend ",[103,469,299],{}," for the persistent instance — this only evicts keys that have a TTL set,\nwhile keys without expiry (e.g. number ranges) are always preserved. This is the crucial difference from\n",[103,472,278],{},", which would also delete keys without a TTL.",[79,475],{},[82,477,479],{"id":478},"mistake-2-persistence-enabled-on-the-cache-instance","Mistake 2: Persistence Enabled on the Cache Instance",[67,481,482,483,486],{},"By default, Redis starts with RDB snapshots enabled (",[103,484,485],{},"save 3600 1 300 100 60 10000","). This means Redis periodically\nwrites the entire dataset to disk — even if it's just volatile cache data.",[67,488,489],{},[92,490,94],{},[96,492,493,500,503],{},[99,494,495,496,499],{},"The ",[103,497,498],{},"BGSAVE"," process forks the Redis process. With 2 GB of cache data, an additional 2 GB of RAM is briefly consumed\nthrough copy-on-write. On a VM with 4 GB of RAM, this can trigger an OOM kill.",[99,501,502],{},"Disk I\u002FO from the dump puts unnecessary loads on the system, especially on shared hosting or small VPS instances with\nslow disks.",[99,504,505],{},"On restart, Redis loads the dump and restores stale cache entries. This sounds beneficial but is actually\ncounterproductive: after a deployment, the cache may contain outdated entries that Shopware serves instead of\nregenerating.",[67,507,508],{},[92,509,510],{},"Solution:",[130,512,516],{"className":513,"code":514,"language":515,"meta":135,"style":135},"language-conf shiki shiki-themes github-light github-dark","# redis-cache.conf (ephemeral)\nsave \"\"\nappendonly no\n","conf",[103,517,518,523,528],{"__ignoreMap":135},[139,519,520],{"class":141,"line":142},[139,521,522],{},"# redis-cache.conf (ephemeral)\n",[139,524,525],{"class":141,"line":149},[139,526,527],{},"save \"\"\n",[139,529,530],{"class":141,"line":160},[139,531,532],{},"appendonly no\n",[67,534,535],{},"Two lines. No RDB, no AOF. The cache instance starts empty — exactly as it should. Shopware rebuilds the cache on\ndemand.",[67,537,538,539,542,543,128],{},"For the ",[92,540,541],{},"persistent instance"," (sessions, carts, number ranges), persistence is ",[92,544,545],{},"mandatory",[130,547,549],{"className":513,"code":548,"language":515,"meta":135,"style":135},"# redis-session.conf (persistent)\nappendonly yes\nappendfsync everysec\nsave 3600 1\nsave 300 100\n",[103,550,551,556,561,566,571],{"__ignoreMap":135},[139,552,553],{"class":141,"line":142},[139,554,555],{},"# redis-session.conf (persistent)\n",[139,557,558],{"class":141,"line":149},[139,559,560],{},"appendonly yes\n",[139,562,563],{"class":141,"line":160},[139,564,565],{},"appendfsync everysec\n",[139,567,568],{"class":141,"line":168},[139,569,570],{},"save 3600 1\n",[139,572,573],{"class":141,"line":176},[139,574,575],{},"save 300 100\n",[79,577],{},[82,579,581],{"id":580},"mistake-3-no-maxmemory-set","Mistake 3: No maxmemory Set",[67,583,584,585,587],{},"Without a ",[103,586,105],{}," limit, Redis grows until the host's memory is exhausted. The Linux OOM killer then terminates the\nRedis process — or worse: the MySQL process, because it consumes more RAM.",[67,589,590],{},[92,591,94],{},[96,593,594,597],{},[99,595,596],{},"Uncontrolled memory consumption leads to system instability.",[99,598,599],{},"Swap usage makes Redis orders of magnitude slower. Redis and swap don't mix — a Redis instance that swaps is slower\nthan a cache hitting MariaDB directly.",[67,601,602],{},[92,603,510],{},[67,605,606],{},"Rules of thumb for a typical Shopware shop:",[96,608,609,615],{},[99,610,611,614],{},[92,612,613],{},"Cache instance (ephemeral):"," 1–2 GB (depending on product count and category depth)",[99,616,617,620],{},[92,618,619],{},"Persistent instance:"," 128–256 MB (depending on concurrent users and carts)",[67,622,623],{},"Always set it explicitly:",[130,625,627],{"className":513,"code":626,"language":515,"meta":135,"style":135},"maxmemory 2gb\nmaxmemory-policy allkeys-lru  # for ephemeral\n",[103,628,629,634],{"__ignoreMap":135},[139,630,631],{"class":141,"line":142},[139,632,633],{},"maxmemory 2gb\n",[139,635,636],{"class":141,"line":149},[139,637,638],{},"maxmemory-policy allkeys-lru  # for ephemeral\n",[67,640,641,642,645],{},"And monitor it. An ",[103,643,644],{},"INFO memory"," check belongs in your monitoring:",[130,647,651],{"className":648,"code":649,"language":650,"meta":135,"style":135},"language-bash shiki shiki-themes github-light github-dark","redis-cli -p 6379 INFO memory | grep used_memory_human\nredis-cli -p 6379 INFO memory | grep maxmemory_human\n","bash",[103,652,653,681],{"__ignoreMap":135},[139,654,655,659,663,666,669,672,675,678],{"class":141,"line":142},[139,656,658],{"class":657},"sScJk","redis-cli",[139,660,662],{"class":661},"sj4cs"," -p",[139,664,665],{"class":661}," 6379",[139,667,668],{"class":193}," INFO",[139,670,671],{"class":193}," memory",[139,673,674],{"class":341}," |",[139,676,677],{"class":657}," grep",[139,679,680],{"class":193}," used_memory_human\n",[139,682,683,685,687,689,691,693,695,697],{"class":141,"line":149},[139,684,658],{"class":657},[139,686,662],{"class":661},[139,688,665],{"class":661},[139,690,668],{"class":193},[139,692,671],{"class":193},[139,694,674],{"class":341},[139,696,677],{"class":657},[139,698,699],{"class":193}," maxmemory_human\n",[79,701],{},[82,703,705],{"id":704},"mistake-4-wrong-eviction-policy","Mistake 4: Wrong Eviction Policy",[67,707,708],{},"Redis offers several eviction policies. The choice directly affects shop behavior.",[67,710,711],{},[92,712,713],{},"Common misconfigurations:",[96,715,716,725,734],{},[99,717,718,721,722,724],{},[103,719,720],{},"noeviction"," on the cache instance → Redis rejects write operations once ",[103,723,105],{}," is reached. Shopware throws\nerrors, the shop goes down.",[99,726,727,730,731,733],{},[103,728,729],{},"allkeys-random"," instead of ",[103,732,278],{}," → Redis deletes random keys instead of the least recently used ones.\nFrequently accessed cache entries get deleted while rarely used ones survive.",[99,735,736,738],{},[103,737,278],{}," on the persistent instance → Redis can delete number range keys that have no TTL. This leads to\nduplicate order numbers.",[67,740,741],{},[92,742,743],{},"The correct mapping (per Shopware docs):",[234,745,746,758],{},[237,747,748],{},[240,749,750,752,755],{},[243,751,245],{},[243,753,754],{},"Policy",[243,756,757],{},"Why",[256,759,760,772],{},[240,761,762,765,769],{},[261,763,764],{},"Ephemeral (cache)",[261,766,767],{},[103,768,278],{},[261,770,771],{},"Least recently used entries are evicted first, new writes always succeed",[240,773,774,777,781],{},[261,775,776],{},"Persistent (sessions, carts, number ranges)",[261,778,779],{},[103,780,299],{},[261,782,783],{},"Only keys with a TTL are evicted; keys without TTL (number ranges) are preserved",[67,785,786,787,789],{},"The difference is subtle but critical: ",[103,788,299],{}," protects all keys without an explicit TTL from deletion. Sessions\nand carts have TTLs and can be evicted under memory pressure. Number ranges have no TTL and remain safe.",[79,791],{},[82,793,795],{"id":794},"mistake-5-incomplete-shopware-side-configuration","Mistake 5: Incomplete Shopware-Side Configuration",[67,797,798],{},"Redis is running, the connection is established — but Shopware doesn't use it for all subsystems because the\nconfiguration was only partially done.",[67,800,801],{},[92,802,803],{},"Typical mistakes:",[96,805,806,809,816],{},[99,807,808],{},"Only the app cache is on Redis, but session handler, cart storage, locks, and increment are forgotten.",[99,810,811,812,815],{},"Lock DSN still points to ",[103,813,814],{},"flock"," instead of Redis → breaks in horizontal scaling setups.",[99,817,818],{},"Increment storage stays on MySQL → unnecessary DB load from locking queries.",[67,820,821],{},"Complete configuration with named connections (≥ 6.6.8.0):",[130,823,825],{"className":132,"code":824,"language":134,"meta":135,"style":135},"# 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",[103,826,827,831,837,843,849,855,863,869,877,881,888,895,905,915,922,932,942,946,953,962,966,973,981,986,994,1002,1012,1020,1030,1038,1047,1054],{"__ignoreMap":135},[139,828,829],{"class":141,"line":142},[139,830,146],{"class":145},[139,832,833,835],{"class":141,"line":149},[139,834,153],{"class":152},[139,836,157],{"class":156},[139,838,839,841],{"class":141,"line":160},[139,840,163],{"class":152},[139,842,157],{"class":156},[139,844,845,847],{"class":141,"line":168},[139,846,171],{"class":152},[139,848,157],{"class":156},[139,850,851,853],{"class":141,"line":176},[139,852,179],{"class":152},[139,854,157],{"class":156},[139,856,857,859,861],{"class":141,"line":184},[139,858,187],{"class":152},[139,860,190],{"class":156},[139,862,194],{"class":193},[139,864,865,867],{"class":141,"line":197},[139,866,200],{"class":152},[139,868,157],{"class":156},[139,870,871,873,875],{"class":141,"line":205},[139,872,187],{"class":152},[139,874,190],{"class":156},[139,876,212],{"class":193},[139,878,879],{"class":141,"line":365},[139,880,387],{"emptyLinePlaceholder":386},[139,882,883,886],{"class":141,"line":371},[139,884,885],{"class":152},"  cache",[139,887,157],{"class":156},[139,889,890,893],{"class":141,"line":383},[139,891,892],{"class":152},"    invalidation",[139,894,157],{"class":156},[139,896,897,900,902],{"class":141,"line":390},[139,898,899],{"class":152},"      delay",[139,901,190],{"class":156},[139,903,904],{"class":661},"0\n",[139,906,907,910,912],{"class":141,"line":398},[139,908,909],{"class":152},"      count",[139,911,190],{"class":156},[139,913,914],{"class":661},"150\n",[139,916,917,920],{"class":141,"line":407},[139,918,919],{"class":152},"      delay_options",[139,921,157],{"class":156},[139,923,924,927,929],{"class":141,"line":416},[139,925,926],{"class":152},"        storage",[139,928,190],{"class":156},[139,930,931],{"class":193},"redis\n",[139,933,934,937,939],{"class":141,"line":421},[139,935,936],{"class":152},"        connection",[139,938,190],{"class":156},[139,940,941],{"class":193},"'ephemeral'\n",[139,943,944],{"class":141,"line":427},[139,945,387],{"emptyLinePlaceholder":386},[139,947,948,951],{"class":141,"line":433},[139,949,950],{"class":152},"  cart",[139,952,157],{"class":156},[139,954,955,958,960],{"class":141,"line":439},[139,956,957],{"class":152},"    redis_url",[139,959,190],{"class":156},[139,961,212],{"class":193},[139,963,964],{"class":141,"line":445},[139,965,387],{"emptyLinePlaceholder":386},[139,967,968,971],{"class":141,"line":451},[139,969,970],{"class":152},"  number_range",[139,972,157],{"class":156},[139,974,975,977,979],{"class":141,"line":458},[139,976,957],{"class":152},[139,978,190],{"class":156},[139,980,212],{"class":193},[139,982,984],{"class":141,"line":983},23,[139,985,387],{"emptyLinePlaceholder":386},[139,987,989,992],{"class":141,"line":988},24,[139,990,991],{"class":152},"  increment",[139,993,157],{"class":156},[139,995,997,1000],{"class":141,"line":996},25,[139,998,999],{"class":152},"    message_queue",[139,1001,157],{"class":156},[139,1003,1005,1008,1010],{"class":141,"line":1004},26,[139,1006,1007],{"class":152},"      type",[139,1009,190],{"class":156},[139,1011,931],{"class":193},[139,1013,1015,1018],{"class":141,"line":1014},27,[139,1016,1017],{"class":152},"      config",[139,1019,157],{"class":156},[139,1021,1023,1026,1028],{"class":141,"line":1022},28,[139,1024,1025],{"class":152},"        url",[139,1027,190],{"class":156},[139,1029,194],{"class":193},[139,1031,1033,1036],{"class":141,"line":1032},29,[139,1034,1035],{"class":152},"    user_activity",[139,1037,157],{"class":156},[139,1039,1041,1043,1045],{"class":141,"line":1040},30,[139,1042,1007],{"class":152},[139,1044,190],{"class":156},[139,1046,931],{"class":193},[139,1048,1050,1052],{"class":141,"line":1049},31,[139,1051,1017],{"class":152},[139,1053,157],{"class":156},[139,1055,1057,1059,1061],{"class":141,"line":1056},32,[139,1058,1025],{"class":152},[139,1060,190],{"class":156},[139,1062,194],{"class":193},[130,1064,1066],{"className":132,"code":1065,"language":134,"meta":135,"style":135},"# 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",[103,1067,1068,1073,1080,1086,1095,1102,1109,1119,1129,1136,1144,1152,1156,1163,1172,1176,1183],{"__ignoreMap":135},[139,1069,1070],{"class":141,"line":142},[139,1071,1072],{"class":145},"# config\u002Fpackages\u002Fprod\u002Fframework.yaml\n",[139,1074,1075,1078],{"class":141,"line":149},[139,1076,1077],{"class":152},"framework",[139,1079,157],{"class":156},[139,1081,1082,1084],{"class":141,"line":160},[139,1083,885],{"class":152},[139,1085,157],{"class":156},[139,1087,1088,1091,1093],{"class":141,"line":168},[139,1089,1090],{"class":152},"    default_redis_provider",[139,1092,190],{"class":156},[139,1094,194],{"class":193},[139,1096,1097,1100],{"class":141,"line":176},[139,1098,1099],{"class":152},"    pools",[139,1101,157],{"class":156},[139,1103,1104,1107],{"class":141,"line":184},[139,1105,1106],{"class":152},"      cache.object",[139,1108,157],{"class":156},[139,1110,1111,1114,1116],{"class":141,"line":197},[139,1112,1113],{"class":152},"        adapter",[139,1115,190],{"class":156},[139,1117,1118],{"class":193},"cache.adapter.redis\n",[139,1120,1121,1124,1126],{"class":141,"line":205},[139,1122,1123],{"class":152},"        tags",[139,1125,190],{"class":156},[139,1127,1128],{"class":661},"true\n",[139,1130,1131,1134],{"class":141,"line":365},[139,1132,1133],{"class":152},"      cache.http",[139,1135,157],{"class":156},[139,1137,1138,1140,1142],{"class":141,"line":371},[139,1139,1113],{"class":152},[139,1141,190],{"class":156},[139,1143,1118],{"class":193},[139,1145,1146,1148,1150],{"class":141,"line":383},[139,1147,1123],{"class":152},[139,1149,190],{"class":156},[139,1151,1128],{"class":661},[139,1153,1154],{"class":141,"line":390},[139,1155,387],{"emptyLinePlaceholder":386},[139,1157,1158,1161],{"class":141,"line":398},[139,1159,1160],{"class":152},"  session",[139,1162,157],{"class":156},[139,1164,1165,1168,1170],{"class":141,"line":407},[139,1166,1167],{"class":152},"    handler_id",[139,1169,190],{"class":156},[139,1171,212],{"class":193},[139,1173,1174],{"class":141,"line":416},[139,1175,387],{"emptyLinePlaceholder":386},[139,1177,1178,1181],{"class":141,"line":421},[139,1179,1180],{"class":152},"  lock",[139,1182,157],{"class":156},[139,1184,1185,1188,1190],{"class":141,"line":427},[139,1186,1187],{"class":152},"    main",[139,1189,190],{"class":156},[139,1191,194],{"class":193},[67,1193,1194,1195,1198],{},"If you don't need the increment storage (no use of admin live statistics), you can set it to ",[103,1196,1197],{},"array"," and eliminate the\nload entirely:",[130,1200,1202],{"className":132,"code":1201,"language":134,"meta":135,"style":135},"shopware:\n  increment:\n    message_queue:\n      type: array\n    user_activity:\n      type: array\n",[103,1203,1204,1210,1216,1222,1231,1237],{"__ignoreMap":135},[139,1205,1206,1208],{"class":141,"line":142},[139,1207,153],{"class":152},[139,1209,157],{"class":156},[139,1211,1212,1214],{"class":141,"line":149},[139,1213,991],{"class":152},[139,1215,157],{"class":156},[139,1217,1218,1220],{"class":141,"line":160},[139,1219,999],{"class":152},[139,1221,157],{"class":156},[139,1223,1224,1226,1228],{"class":141,"line":168},[139,1225,1007],{"class":152},[139,1227,190],{"class":156},[139,1229,1230],{"class":193},"array\n",[139,1232,1233,1235],{"class":141,"line":176},[139,1234,1035],{"class":152},[139,1236,157],{"class":156},[139,1238,1239,1241,1243],{"class":141,"line":184},[139,1240,1007],{"class":152},[139,1242,190],{"class":156},[139,1244,1230],{"class":193},[79,1246],{},[82,1248,1250],{"id":1249},"mistake-6-misunderstanding-persistent1","Mistake 6: Misunderstanding ?persistent=1",[67,1252,1253],{},"A classic seen in many tutorials:",[130,1255,1257],{"className":132,"code":1256,"language":134,"meta":135,"style":135},"shopware:\n  cart:\n    redis_url: 'redis:\u002F\u002Fredis:6380?persistent=1'\n",[103,1258,1259,1265,1271],{"__ignoreMap":135},[139,1260,1261,1263],{"class":141,"line":142},[139,1262,153],{"class":152},[139,1264,157],{"class":156},[139,1266,1267,1269],{"class":141,"line":149},[139,1268,950],{"class":152},[139,1270,157],{"class":156},[139,1272,1273,1275,1277],{"class":141,"line":160},[139,1274,957],{"class":152},[139,1276,190],{"class":156},[139,1278,1279],{"class":193},"'redis:\u002F\u002Fredis:6380?persistent=1'\n",[67,1281,495,1282,1285,1286,1289,1290,1293],{},[103,1283,1284],{},"?persistent=1"," parameter has ",[92,1287,1288],{},"nothing to do with data persistence",". It enables ",[92,1291,1292],{},"persistent connections"," —\nconnection pooling on the PHP side. This keeps the TCP connection to Redis open across multiple requests instead of\nrebuilding it on every request.",[67,1295,1296],{},[92,1297,1298],{},"Why the confusion hurts:",[96,1300,1301,1307],{},[99,1302,1303,1304,1306],{},"Developers set ",[103,1305,1284],{}," and assume data persistence is taken care of. The actual Redis persistence (RDB\u002FAOF) is\nnever configured. After a Redis restart, all carts are gone.",[99,1308,1309,1310,1312],{},"Conversely, ",[103,1311,1284],{}," is omitted because persistence isn't wanted (cache instance). But connection pooling would\nhave the most impact there, since cache requests are the most frequent.",[67,1314,1315],{},[92,1316,510],{},[96,1318,1319,1333],{},[99,1320,1321,1324,1325,1328,1329,1332],{},[92,1322,1323],{},"Data persistence"," is configured on the Redis server side (",[103,1326,1327],{},"save",", ",[103,1330,1331],{},"appendonly",")",[99,1334,1335,1338,1339,1341],{},[92,1336,1337],{},"Connection pooling"," is configured in the DSN (",[103,1340,1284],{},") — beneficial for both instances",[79,1343],{},[82,1345,1347],{"id":1346},"mistake-7-forgetting-cart-migration","Mistake 7: Forgetting Cart Migration",[67,1349,1350],{},"Shopware stores carts in MySQL by default. Switching to Redis requires an explicit migration, otherwise existing carts\nare gone after the config change.",[130,1352,1354],{"className":648,"code":1353,"language":650,"meta":135,"style":135},"# Migrate carts from MySQL to Redis\nbin\u002Fconsole cart:migrate\n",[103,1355,1356,1361],{"__ignoreMap":135},[139,1357,1358],{"class":141,"line":142},[139,1359,1360],{"class":145},"# Migrate carts from MySQL to Redis\n",[139,1362,1363,1366],{"class":141,"line":149},[139,1364,1365],{"class":657},"bin\u002Fconsole",[139,1367,1368],{"class":193}," cart:migrate\n",[67,1370,1371,1372,1375,1376,1378],{},"The command reads carts from the database and writes them to the configured Redis instance. It automatically uses the\n",[103,1373,1374],{},"redis_url"," from ",[103,1377,127],{},". The command is idempotent and can be included in your deployment script.",[67,1380,1381],{},"Without this step, all customers with active carts lose their items after the switch.",[79,1383],{},[82,1385,1387],{"id":1386},"mistake-8-no-monitoring","Mistake 8: No Monitoring",[67,1389,1390],{},"Redis hums along quietly. Nobody notices the hit rate is at 12%, memory is 98% full, or latency is at 50ms instead of\n0.2ms.",[67,1392,1393],{},[92,1394,1395],{},"Minimum monitoring:",[130,1397,1399],{"className":648,"code":1398,"language":650,"meta":135,"style":135},"# Check hit rate\nredis-cli -p 6379 INFO stats | grep -E \"keyspace_hits|keyspace_misses\"\n\n# Memory usage\nredis-cli -p 6379 INFO memory | grep used_memory_peak_human\n\n# Connected clients\nredis-cli -p 6379 INFO clients | grep connected_clients\n\n# Slow log\nredis-cli -p 6379 SLOWLOG GET 10\n",[103,1400,1401,1406,1429,1433,1438,1457,1461,1466,1486,1490,1495],{"__ignoreMap":135},[139,1402,1403],{"class":141,"line":142},[139,1404,1405],{"class":145},"# Check hit rate\n",[139,1407,1408,1410,1412,1414,1416,1419,1421,1423,1426],{"class":141,"line":149},[139,1409,658],{"class":657},[139,1411,662],{"class":661},[139,1413,665],{"class":661},[139,1415,668],{"class":193},[139,1417,1418],{"class":193}," stats",[139,1420,674],{"class":341},[139,1422,677],{"class":657},[139,1424,1425],{"class":661}," -E",[139,1427,1428],{"class":193}," \"keyspace_hits|keyspace_misses\"\n",[139,1430,1431],{"class":141,"line":160},[139,1432,387],{"emptyLinePlaceholder":386},[139,1434,1435],{"class":141,"line":168},[139,1436,1437],{"class":145},"# Memory usage\n",[139,1439,1440,1442,1444,1446,1448,1450,1452,1454],{"class":141,"line":176},[139,1441,658],{"class":657},[139,1443,662],{"class":661},[139,1445,665],{"class":661},[139,1447,668],{"class":193},[139,1449,671],{"class":193},[139,1451,674],{"class":341},[139,1453,677],{"class":657},[139,1455,1456],{"class":193}," used_memory_peak_human\n",[139,1458,1459],{"class":141,"line":184},[139,1460,387],{"emptyLinePlaceholder":386},[139,1462,1463],{"class":141,"line":197},[139,1464,1465],{"class":145},"# Connected clients\n",[139,1467,1468,1470,1472,1474,1476,1479,1481,1483],{"class":141,"line":205},[139,1469,658],{"class":657},[139,1471,662],{"class":661},[139,1473,665],{"class":661},[139,1475,668],{"class":193},[139,1477,1478],{"class":193}," clients",[139,1480,674],{"class":341},[139,1482,677],{"class":657},[139,1484,1485],{"class":193}," connected_clients\n",[139,1487,1488],{"class":141,"line":365},[139,1489,387],{"emptyLinePlaceholder":386},[139,1491,1492],{"class":141,"line":371},[139,1493,1494],{"class":145},"# Slow log\n",[139,1496,1497,1499,1501,1503,1506,1509],{"class":141,"line":383},[139,1498,658],{"class":657},[139,1500,662],{"class":661},[139,1502,665],{"class":661},[139,1504,1505],{"class":193}," SLOWLOG",[139,1507,1508],{"class":193}," GET",[139,1510,1511],{"class":661}," 10\n",[67,1513,1514,1515,1517],{},"The hit rate for the cache instance should be above 80%. If it's lower, either the TTL is wrong, the eviction policy is\nmisconfigured, or ",[103,1516,105],{}," is too low and Redis is constantly cleaning up.",[67,1519,1520,1521,1524],{},"For a proper setup: Prometheus with ",[103,1522,1523],{},"redis_exporter"," and a Grafana dashboard. The 30-minute setup investment saves hours\nof debugging.",[79,1526],{},[82,1528,1530],{"id":1529},"mistake-9-tcp-configuration-ignored","Mistake 9: TCP Configuration Ignored",[67,1532,1533],{},"Redis and Shopware run on the same host but communicate over TCP instead of Unix sockets. Or Redis runs on a separate\nhost, but TCP keepalive and timeout are left by default.",[67,1535,1536],{},[92,1537,1538],{},"When Redis runs on the same host:",[67,1540,1541],{},"Unix sockets instead of TCP eliminate the entire TCP stack overhead. At high throughput, these are measurable\nmicroseconds per request:",[130,1543,1545],{"className":513,"code":1544,"language":515,"meta":135,"style":135},"# redis-cache.conf\nunixsocket \u002Fvar\u002Frun\u002Fredis\u002Fredis-cache.sock\nunixsocketperm 770\nport 0\n",[103,1546,1547,1552,1557,1562],{"__ignoreMap":135},[139,1548,1549],{"class":141,"line":142},[139,1550,1551],{},"# redis-cache.conf\n",[139,1553,1554],{"class":141,"line":149},[139,1555,1556],{},"unixsocket \u002Fvar\u002Frun\u002Fredis\u002Fredis-cache.sock\n",[139,1558,1559],{"class":141,"line":160},[139,1560,1561],{},"unixsocketperm 770\n",[139,1563,1564],{"class":141,"line":168},[139,1565,1566],{},"port 0\n",[130,1568,1570],{"className":215,"code":1569,"language":217,"meta":135,"style":135},"REDIS_EPHEMERAL=redis:\u002F\u002F\u002Fvar\u002Frun\u002Fredis\u002Fredis-cache.sock\n",[103,1571,1572],{"__ignoreMap":135},[139,1573,1574],{"class":141,"line":142},[139,1575,1569],{},[67,1577,1578],{},[92,1579,1580],{},"When Redis runs remotely:",[130,1582,1584],{"className":513,"code":1583,"language":515,"meta":135,"style":135},"tcp-keepalive 60\ntimeout 300\ntcp-backlog 511\n",[103,1585,1586,1591,1596],{"__ignoreMap":135},[139,1587,1588],{"class":141,"line":142},[139,1589,1590],{},"tcp-keepalive 60\n",[139,1592,1593],{"class":141,"line":149},[139,1594,1595],{},"timeout 300\n",[139,1597,1598],{"class":141,"line":160},[139,1599,1600],{},"tcp-backlog 511\n",[67,1602,1603,1604,1607],{},"Without ",[103,1605,1606],{},"tcp-keepalive",", dead connections can remain open for minutes and block the connection pool.",[67,1609,1610,1611,128],{},"When using a Redis cluster, additionally set in ",[103,1612,1613],{},"php.ini",[130,1615,1619],{"className":1616,"code":1617,"language":1618,"meta":135,"style":135},"language-ini shiki shiki-themes github-light github-dark","redis.clusters.cache_slots=1\n","ini",[103,1620,1621],{"__ignoreMap":135},[139,1622,1623],{"class":141,"line":142},[139,1624,1617],{},[67,1626,1627],{},"This skips the cluster node lookup on every connection.",[79,1629],{},[82,1631,1633],{"id":1632},"summary","Summary",[234,1635,1636,1649],{},[237,1637,1638],{},[240,1639,1640,1643,1646],{},[243,1641,1642],{},"Mistake",[243,1644,1645],{},"Impact",[243,1647,1648],{},"Fix",[256,1650,1651,1662,1678,1691,1707,1718,1731,1744,1755],{},[240,1652,1653,1656,1659],{},[261,1654,1655],{},"Single instance for everything",[261,1657,1658],{},"Eviction deletes sessions\u002Fcarts",[261,1660,1661],{},"Separate ephemeral\u002Fpersistent instances",[240,1663,1664,1667,1670],{},[261,1665,1666],{},"Persistence on cache",[261,1668,1669],{},"OOM kill, stale cache after restart",[261,1671,1672,1328,1675],{},[103,1673,1674],{},"save \"\"",[103,1676,1677],{},"appendonly no",[240,1679,1680,1685,1688],{},[261,1681,1682,1683],{},"No ",[103,1684,105],{},[261,1686,1687],{},"OOM kill, swap usage",[261,1689,1690],{},"Set explicit limit",[240,1692,1693,1696,1699],{},[261,1694,1695],{},"Wrong eviction policy",[261,1697,1698],{},"Shop errors or data loss",[261,1700,1701,1703,1704,1706],{},[103,1702,278],{}," (cache), ",[103,1705,299],{}," (persistent)",[240,1708,1709,1712,1715],{},[261,1710,1711],{},"Incomplete Shopware config",[261,1713,1714],{},"Redis running but not fully used",[261,1716,1717],{},"Configure all subsystems",[240,1719,1720,1725,1728],{},[261,1721,1722,1724],{},[103,1723,1284],{}," confused",[261,1726,1727],{},"No data persistence despite assumption",[261,1729,1730],{},"Configure server-side persistence",[240,1732,1733,1736,1739],{},[261,1734,1735],{},"Cart migration forgotten",[261,1737,1738],{},"Carts lost after Redis switch",[261,1740,1741],{},[103,1742,1743],{},"bin\u002Fconsole cart:migrate",[240,1745,1746,1749,1752],{},[261,1747,1748],{},"No monitoring",[261,1750,1751],{},"Problems go undetected",[261,1753,1754],{},"Monitor hit rate, memory, slow log",[240,1756,1757,1760,1763],{},[261,1758,1759],{},"TCP instead of socket",[261,1761,1762],{},"Unnecessary overhead",[261,1764,1765],{},"Unix socket for co-located setups",[67,1767,1768],{},"Redis is a powerful tool — but only when the configuration matches the use case. A misconfigured Redis is worse than no\nRedis at all because it introduces an additional point of failure while giving the impression that the performance work\nis already done.",[1770,1771,1772],"style",{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .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 .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":135,"searchDepth":149,"depth":149,"links":1774},[1775,1776,1777,1778,1779,1780,1781,1782,1783,1784],{"id":84,"depth":149,"text":85},{"id":478,"depth":149,"text":479},{"id":580,"depth":149,"text":581},{"id":704,"depth":149,"text":705},{"id":794,"depth":149,"text":795},{"id":1249,"depth":149,"text":1250},{"id":1346,"depth":149,"text":1347},{"id":1386,"depth":149,"text":1387},{"id":1529,"depth":149,"text":1530},{"id":1632,"depth":149,"text":1633},"Common Redis misconfigurations in Shopware 6 that kill performance instead of improving it – from persistence on cache instances to missing eviction policies – and how to fix them.","md",{},"\u002Fen\u002Fblog\u002Fshopware-6-redis-configuration-mistakes","2026-04-02 08:00:00",null,[1792],{"headline":58,"mainEntityOfPage":1793,"author":1795,"publisher":1800,"datePublished":1801,"@type":1802},{"@id":1794},"#webpage",{"@id":1796,"name":1797,"url":1798,"@type":1799},"#identity","Kickbyte GmbH","https:\u002F\u002Fkickbyte.de","Organization",{"@id":1796,"name":1797,"url":1798,"@type":1799},"2026-04-02T08:00:00Z","BlogPosting",{"title":58,"description":1785,"ogTitle":1804,"ogDescription":1785,"robots":1805},"Shopware 6 & Redis: How Misconfigured Instances Hurt More Than They Help - Kickbyte","index,follow",{"loc":1788,"lastmod":1807,"changefreq":1808,"priority":1809},"2026-04-02","monthly",0.8,"en\u002Fblog\u002Fshopware-6-redis-configuration-mistakes",[1812,1813,1814,1815,1816],"Shopware","Redis","Performance","DevOps","E-Commerce","shopware-6-redis-configuration-mistakes","YcM9Yr9qaaKmmyhqngFf67ARfsRLJrxfXhk4k1oTO2U",{"ai-content-creation":1820,"ecommerce":1823,"edi-integration":1826,"erp-integration":1829,"individual-development":1832,"system-integration":1835,"system-modernization-migration":1838,"ux-ui-design":1841,"agentic-commerce":1844,"edi4jtl":1846,"shopware-6-redis-configuration-mistakes":1849,"shopware-6-use-cases":1852,"shopware-frontends-headless-storefront-nuxt":1855},{"en":1821,"de":1822},"\u002Fservices\u002Fai-content-creation","\u002Fleistungen\u002Fki-contentproduktion",{"en":1824,"de":1825},"\u002Fservices\u002Fecommerce","\u002Fleistungen\u002Fecommerce-entwicklung",{"en":1827,"de":1828},"\u002Fservices\u002Fedi-integration","\u002Fleistungen\u002Fedi-integration",{"en":1830,"de":1831},"\u002Fservices\u002Ferp-integration","\u002Fleistungen\u002Ferp-integration",{"en":1833,"de":1834},"\u002Fservices\u002Findividual-development","\u002Fleistungen\u002Findividuelle-softwareentwicklung",{"en":1836,"de":1837},"\u002Fservices\u002Fsystem-integration","\u002Fleistungen\u002Fsystemintegration",{"en":1839,"de":1840},"\u002Fservices\u002Fsystem-modernization-migration","\u002Fleistungen\u002Fmigration-systemmodernisierung",{"en":1842,"de":1843},"\u002Fservices\u002Fux-ui-design","\u002Fleistungen\u002Fux-ui-design",{"en":1845,"de":1845},"\u002Fblog\u002Fagentic-commerce",{"en":1847,"de":1848},"\u002Fblog\u002Fedi4jtl","\u002Fblog\u002Fedi-integration-jtl",{"en":1850,"de":1851},"\u002Fblog\u002Fshopware-6-redis-configuration-mistakes","\u002Fblog\u002Fshopware-6-redis-fehlkonfiguration",{"en":1853,"de":1854},"\u002Fblog\u002Fshopware-6-use-cases","\u002Fblog\u002Fshopware-6-wann-sinnvoll",{"en":1856,"de":1856},"\u002Fblog\u002Fshopware-frontends-headless-storefront-nuxt",1775522762796]