[{"data":1,"prerenderedAt":497},["ShallowReactive",2],{"navigation_docs":3,"section-navigation-docs":130,"-docs-redis":164,"-docs-redis-surround":404,"doc-previews":409},[4,8,50,54,58,62,66,70,74,78,82,86,90,94,98,102,106,110,114,118,122,126],{"title":5,"path":6,"stem":7},"Quickstart","\u002Fdocs\u002Fquickstart","docs\u002F01.quickstart",{"title":9,"path":10,"stem":11,"children":12},"Guides","\u002Fdocs\u002Fguides","docs\u002F02.guides\u002Findex",[13,14,18,22,26,30,34,38,42,46],{"title":9,"path":10,"stem":11},{"title":15,"path":16,"stem":17},"Next.js","\u002Fdocs\u002Fguides\u002Fnextjs","docs\u002F02.guides\u002F1.nextjs",{"title":19,"path":20,"stem":21},"Nuxt","\u002Fdocs\u002Fguides\u002Fnuxt","docs\u002F02.guides\u002F2.nuxt",{"title":23,"path":24,"stem":25},"SvelteKit","\u002Fdocs\u002Fguides\u002Fsveltekit","docs\u002F02.guides\u002F3.sveltekit",{"title":27,"path":28,"stem":29},"Astro","\u002Fdocs\u002Fguides\u002Fastro","docs\u002F02.guides\u002F4.astro",{"title":31,"path":32,"stem":33},"Express","\u002Fdocs\u002Fguides\u002Fexpress","docs\u002F02.guides\u002F5.express",{"title":35,"path":36,"stem":37},"FastAPI","\u002Fdocs\u002Fguides\u002Ffastapi","docs\u002F02.guides\u002F6.fastapi",{"title":39,"path":40,"stem":41},"Django","\u002Fdocs\u002Fguides\u002Fdjango","docs\u002F02.guides\u002F7.django",{"title":43,"path":44,"stem":45},"Laravel","\u002Fdocs\u002Fguides\u002Flaravel","docs\u002F02.guides\u002F8.laravel",{"title":47,"path":48,"stem":49},"Go","\u002Fdocs\u002Fguides\u002Fgo","docs\u002F02.guides\u002F9.go",{"title":51,"path":52,"stem":53},"Services","\u002Fdocs\u002Fservices","docs\u002F03.services",{"title":55,"path":56,"stem":57},"Deployments","\u002Fdocs\u002Fdeployments","docs\u002F04.deployments",{"title":59,"path":60,"stem":61},"Builds","\u002Fdocs\u002Fbuilds","docs\u002F05.builds",{"title":63,"path":64,"stem":65},"Variables","\u002Fdocs\u002Fvariables","docs\u002F06.variables",{"title":67,"path":68,"stem":69},"Domains","\u002Fdocs\u002Fdomains","docs\u002F07.domains",{"title":71,"path":72,"stem":73},"PostgreSQL","\u002Fdocs\u002Fpostgres","docs\u002F08.postgres",{"title":75,"path":76,"stem":77},"Object storage","\u002Fdocs\u002Fobject-storage","docs\u002F09.object-storage",{"title":79,"path":80,"stem":81},"Volumes","\u002Fdocs\u002Fvolumes","docs\u002F10.volumes",{"title":83,"path":84,"stem":85},"Key-value store","\u002Fdocs\u002Fredis","docs\u002F11.redis",{"title":87,"path":88,"stem":89},"Workspaces","\u002Fdocs\u002Fworkspaces","docs\u002F12.workspaces",{"title":91,"path":92,"stem":93},"Projects","\u002Fdocs\u002Fprojects","docs\u002F13.projects",{"title":95,"path":96,"stem":97},"Environments","\u002Fdocs\u002Fenvironments","docs\u002F14.environments",{"title":99,"path":100,"stem":101},"Eject","\u002Fdocs\u002Feject","docs\u002F15.eject",{"title":103,"path":104,"stem":105},"API","\u002Fdocs\u002Fapi","docs\u002F16.api",{"title":107,"path":108,"stem":109},"CLI","\u002Fdocs\u002Fcli","docs\u002F17.cli",{"title":111,"path":112,"stem":113},"Claude Plugin & MCP","\u002Fdocs\u002Fclaude-plugin","docs\u002F18.claude-plugin",{"title":115,"path":116,"stem":117},"Metrics","\u002Fdocs\u002Fmetrics","docs\u002F19.metrics",{"title":119,"path":120,"stem":121},"Logs","\u002Fdocs\u002Flogs","docs\u002F20.logs",{"title":123,"path":124,"stem":125},"Billing","\u002Fdocs\u002Fbilling","docs\u002F21.billing",{"title":127,"path":128,"stem":129},"Self-hosting","\u002Fdocs\u002Fself-hosting","docs\u002F22.self-hosting",[131,132,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],{"title":5,"path":6,"stem":7},{"title":9,"path":10,"stem":11,"children":133},[134,135,136,137,138,139,140,141,142,143],{"title":9,"path":10,"stem":11},{"title":15,"path":16,"stem":17},{"title":19,"path":20,"stem":21},{"title":23,"path":24,"stem":25},{"title":27,"path":28,"stem":29},{"title":31,"path":32,"stem":33},{"title":35,"path":36,"stem":37},{"title":39,"path":40,"stem":41},{"title":43,"path":44,"stem":45},{"title":47,"path":48,"stem":49},{"title":51,"path":52,"stem":53},{"title":55,"path":56,"stem":57},{"title":59,"path":60,"stem":61},{"title":63,"path":64,"stem":65},{"title":67,"path":68,"stem":69},{"title":71,"path":72,"stem":73},{"title":75,"path":76,"stem":77},{"title":79,"path":80,"stem":81},{"title":83,"path":84,"stem":85},{"title":87,"path":88,"stem":89},{"title":91,"path":92,"stem":93},{"title":95,"path":96,"stem":97},{"title":99,"path":100,"stem":101},{"title":103,"path":104,"stem":105},{"title":107,"path":108,"stem":109},{"title":111,"path":112,"stem":113},{"title":115,"path":116,"stem":117},{"title":119,"path":120,"stem":121},{"title":123,"path":124,"stem":125},{"title":127,"path":128,"stem":129},{"id":165,"title":83,"body":166,"description":397,"extension":398,"links":399,"meta":400,"navigation":401,"path":84,"seo":402,"stem":85,"__hash__":403},"docs\u002Fdocs\u002F11.redis.md",{"type":167,"value":168,"toc":387},"minimark",[169,173,176,181,193,201,205,216,279,289,295,299,332,336,341,344,348,362,366,370],[170,171,172],"p",{},"A key-value store is the fast, in-memory place your services reach for when a database would be overkill. Cached responses, user sessions, rate-limit counters, a queue for background jobs.",[170,174,175],{},"Lucity gives you a Redis®-compatible store, so every Redis client and library you already use works against it unchanged.",[177,178,180],"h2",{"id":179},"provisioning","Provisioning",[170,182,183,184,188,189,192],{},"On the project canvas, click ",[185,186,187],"strong",{},"Create"," and choose ",[185,190,191],{},"Redis",". Give it a name between 2 and 16 characters and confirm.",[170,194,195,196,200],{},"A store belongs to one ",[197,198,199],"a",{"href":96},"environment",", so development and production each get their own with separate data and separate passwords.",[177,202,204],{"id":203},"connect","Connect",[170,206,207,208,212,213,215],{},"Connect a service with a ",[197,209,211],{"href":210},"\u002Fdocs\u002Fvariables#dynamic-variables","dynamic variable",". Open the service's ",[185,214,63],{}," tab, click the link icon in the value field, and pick from the store's group. It exposes four values:",[217,218,219,232],"table",{},[220,221,222],"thead",{},[223,224,225,229],"tr",{},[226,227,228],"th",{},"Variable",[226,230,231],{},"What it is",[233,234,235,247,257,269],"tbody",{},[223,236,237,244],{},[238,239,240],"td",{},[241,242,243],"code",{},"uri",[238,245,246],{},"The complete connection URL, which is usually the only one you need",[223,248,249,254],{},[238,250,251],{},[241,252,253],{},"host",[238,255,256],{},"The private hostname",[223,258,259,264],{},[238,260,261],{},[241,262,263],{},"port",[238,265,266],{},[241,267,268],{},"6379",[223,270,271,276],{},[238,272,273],{},[241,274,275],{},"password",[238,277,278],{},"The generated password",[170,280,281,282,284,285,288],{},"Most libraries take the URL directly, so linking ",[241,283,243],{}," to ",[241,286,287],{},"REDIS_URL"," is usually the whole job.",[170,290,291,292,294],{},"The store's ",[185,293,204],{}," tab shows the same values if you need to read them. The store is reachable only from services in its own environment and there is no built-in way to expose it to the internet.",[177,296,298],{"id":297},"what-it-is-good-for","What it is good for",[300,301,302,309,320,326],"ul",{},[303,304,305,308],"li",{},[185,306,307],{},"Caching."," Expensive query results, rendered fragments, and responses from APIs that are slower than you would like.",[303,310,311,314,315,319],{},[185,312,313],{},"Sessions."," Anything held in a service's memory belongs to one instance and disappears when it rolls. A session store here survives deploys and works across ",[197,316,318],{"href":317},"\u002Fdocs\u002Fservices#replicas-and-autoscaling","replicas",".",[303,321,322,325],{},[185,323,324],{},"Rate limiting and counters."," Atomic increments with expiry, which is exactly what the data structures are for.",[303,327,328,331],{},[185,329,330],{},"Job queues."," BullMQ, Sidekiq, Celery, RQ and the rest all run on a Redis-compatible store. Point the worker and the producer at the same one.",[177,333,335],{"id":334},"persistence","Persistence",[170,337,338,339,319],{},"Writes are appended to disk as they happen, so the data survives a restart or a redeploy. Treat it as durable enough for sessions and queues, and not as the place for anything you cannot lose. It is a single instance with no replica and no backups, so a lost store is a lost store. Anything you would be upset to lose belongs in ",[197,340,71],{"href":72},[170,342,343],{},"Each store gets 1 GB of disk. Set your expiries and your eviction accordingly, and remember that a queue with no consumer keeps growing.",[177,345,347],{"id":346},"under-the-hood","Under the hood",[170,349,350,351,357,358,361],{},"Stores run ",[197,352,356],{"href":353,"rel":354},"https:\u002F\u002Fvalkey.io",[355],"nofollow","Valkey",", the open-source fork of Redis, as a single instance with append-only persistence and password authentication. The Redis protocol is the interface, which is why your existing clients neither know nor care about the difference. An ",[197,359,360],{"href":100},"ejected"," project keeps the store as a plain StatefulSet.",[363,364,365],"note",{},"Redis is a registered trademark of Redis Ltd. Any rights therein are reserved to Redis Ltd. Any use by Lucity is for referential purposes only, and does not indicate any sponsorship, endorsement or affiliation between Redis Ltd. and Lucity.",[177,367,369],{"id":368},"next-steps","Next steps",[300,371,372,377,382],{},[303,373,374,376],{},[197,375,63],{"href":210}," for wiring a store into a service",[303,378,379,381],{},[197,380,71],{"href":72}," for data that has to survive",[303,383,384,386],{},[197,385,51],{"href":317}," for why shared state matters once you run more than one instance",{"title":388,"searchDepth":389,"depth":389,"links":390},"",2,[391,392,393,394,395,396],{"id":179,"depth":389,"text":180},{"id":203,"depth":389,"text":204},{"id":297,"depth":389,"text":298},{"id":334,"depth":389,"text":335},{"id":346,"depth":389,"text":347},{"id":368,"depth":389,"text":369},"A Redis®-compatible key-value store for caching, sessions and queues.","md",null,{},true,{"title":83,"description":397},"ckO_Uc_E50XgMQOv_kgLKep6PjUUTIF4eGN4h9NLf78",[405,407],{"title":79,"path":80,"stem":81,"description":406,"children":-1},"Persistent disks for services that need to keep state on the filesystem.",{"title":87,"path":88,"stem":89,"description":408,"children":-1},"Workspaces represent your organization in Lucity, with their own members, isolation and billing.",[410,413,415,418,421,424,427,430,433,436,439,442,445,447,449,451,453,455,457,459,460,461,462,464,466,468,470,472,474,476,478,480,482,485,489,493],{"path":6,"title":411,"description":412},"Deploy your first service","Deploy an app to Lucity, put it on a public domain, and connect a PostgreSQL database and an object storage bucket in about fifteen minutes.",{"path":414,"title":9,"description":399},"\u002Fdocs\u002Fguides\u002F.navigation",{"path":16,"title":416,"description":417},"Deploy a Next.js app","Deploy a Next.js app on Lucity, with a database, environment variables that behave, and no Dockerfile.",{"path":20,"title":419,"description":420},"Deploy a Nuxt app","Deploy a Nuxt app on Lucity. Nitro output, runtime config, and a database, with no preset to pick.",{"path":24,"title":422,"description":423},"Deploy a SvelteKit app","Deploy a SvelteKit app on Lucity. One adapter change stands between a fresh project and a running service.",{"path":28,"title":425,"description":426},"Deploy an Astro site","Deploy an Astro site on Lucity, static by default and server rendered when you add an adapter.",{"path":32,"title":428,"description":429},"Deploy an Express API","Deploy an Express API on Lucity. Three requirements, none of them platform-specific.",{"path":36,"title":431,"description":432},"Deploy a FastAPI service","Deploy a FastAPI service on Lucity. Detection is picky about layout, and the fix is one setting.",{"path":40,"title":434,"description":435},"Deploy a Django project","Deploy a Django project on Lucity, with migrations that run themselves and static files that do not.",{"path":44,"title":437,"description":438},"Deploy a Laravel application","Deploy a Laravel application on Lucity, with migrations, caches and a queue worker, and no server to configure.",{"path":48,"title":440,"description":441},"Deploy a Go service","Deploy a Go service on Lucity. Compiled in the build, shipped as a binary, nothing else in the image.",{"path":10,"title":443,"description":444},"Deploy your framework","Deploy guides for the frameworks people actually ship: Next.js, Nuxt, SvelteKit, Astro, Express, FastAPI, Django, Laravel, and Go.",{"path":52,"title":51,"description":446},"Services are the deployable units of a project: what they are, how they are configured, and how they scale.",{"path":56,"title":55,"description":448},"How a deployment goes live on Lucity, and the ways to trigger one.",{"path":60,"title":59,"description":450},"How Lucity turns your source code into a container image.",{"path":64,"title":63,"description":452},"Configuration for your services: service variables, shared variables, and dynamic variables.",{"path":68,"title":67,"description":454},"Put a service on the internet. Use a platform hostname for quick tests, or a domain you own.",{"path":72,"title":71,"description":456},"Managed PostgreSQL databases, replicated and backed up, connected to your services without copying credentials.",{"path":76,"title":75,"description":458},"S3-compatible buckets for uploads, exports and anything else your service needs to keep.",{"path":80,"title":79,"description":406},{"path":84,"title":83,"description":397},{"path":88,"title":87,"description":408},{"path":92,"title":91,"description":463},"Projects group services, databases and the environments they run in.",{"path":96,"title":95,"description":465},"Development, staging, production: isolated copies of the same application.",{"path":100,"title":99,"description":467},"Download a project as a Helm chart and run it on a Kubernetes cluster of your own.",{"path":104,"title":103,"description":469},"The GraphQL API behind the dashboard, with an interactive playground.",{"path":108,"title":107,"description":471},"Deploy and manage your services from a terminal or a CI pipeline.",{"path":112,"title":111,"description":473},"Deploy and manage your services from Claude Code, Codex, Cursor or any other MCP client.",{"path":116,"title":115,"description":475},"CPU and memory for every service, and disk usage for every volume.",{"path":120,"title":119,"description":477},"What your services print while they run, and the output of every deployment step.",{"path":124,"title":123,"description":479},"Plans, resource usage, the free trial, and what happens when a payment fails.",{"path":128,"title":127,"description":481},"Run the whole platform on a Kubernetes cluster you own, using the same two Helm charts we run ourselves.",{"path":483,"title":484,"description":399},"\u002Flegal\u002F.navigation","Legal",{"path":486,"title":487,"description":488},"\u002Flegal\u002Fdata-processing-agreement","Data Processing Agreement","How Lucity processes personal data on your behalf.",{"path":490,"title":491,"description":492},"\u002Flegal\u002Fprivacy-policy","Privacy Policy","How Lucity handles your data.",{"path":494,"title":495,"description":496},"\u002Flegal\u002Fterms-of-use","Terms of Use","Terms governing your use of Lucity.",1791216728305]