ProNextJS

    Should I Store State In Memory On The Server?

    Jack HerringtonJack Herrington

    Question: Should I store state in memory on the server?

    Answer: It's super tempting to store state on the server. For example in demos I'll store the to-do list we are working on in memory on the server, as opposed to say, in a database or in a microservice. But I'm doing that in the demo becuase I'm focusing on how we edit or view the to-dos and not how we store them.

    In production you should never store any state in server memory between requests. In other words you want your server to be stateless. This means that given a user identity (usually provided as a cookie) and a URL any server should be able to service any request from any user. When this is the case you can scale your application to service more customers by simply deploying more servers.

    If you store the data from customer A in the memory of server B, then only server B can process requests from that customer because only that server has that data. This is technically do-able using "sticky sessions" but it is undesirable because the only way to scale for a customer or a set of customers is to make the single server bigger.

    This is also why you should always deploy at least two instances of a given server in production. If you have one server then it's possible to hold state in memory and not see any issues. If you have two load-balanced servers then if you hold state in memory you will see bugs as users requests bounce between servers and the state between those servers gets out of sync.

    It is ok to cache data in memory on a per-request basis. For example if three components on the same page need the same piece of data from a REST service then you cache that request once at the start of the request and then use that cache for all three requests. This is fine as long as you are guaranteed that the cache is flushed after each request. The fetch caches provided by React and NextJS are per-request caches, so they are safe.

    Long story short, even though at times you might see someone persistently storing state on a server in a demo, that's not something you should do in production.

    Subscribe for Free Tips, Tutorials, and Special Discounts

    We're in this together!

    I respect your privacy. Unsubscribe at any time.