asp.net-corememorycache

Cons of using MemoryCache as a temporary copy of DB table


I have a site where you can list your car for sale. There is a list and a map with filtering on car types and other car specifications. My idea was to cache cars table and use that to filter on when user is searching for a car on the website. Currently, especially when zooming in/out on the map, each time user does that, http request is made and it's querying the database, and that can be slow and heavy on the server.

As an experiment with 1 000 items, I have cached map data (trimmed data with only basic info) and it's working fine. I was thinking of doing a basically copy of cars table instead with all needed joins added in Memory Cache and use that instead of querying the DB every request for both list and the map. I would have Cron Job every 5 minutes (as data can change, but it doesn't have to be immediate) to update Memory Cache with latest cars data from DB.

What would be the cons of using this approach in long term and for using it for example storing 100 000 records? Beside server needing more RAM, would there be any concerns about scalability or usability of this approach? Would it be better to use Redis instead?

I do have in place now "search as you type" service, but I don't really need that functionality as filtering is pretty exact, I have added it more as a caching server but I think I would be better off just using Memory Cache until a real need for that kind of service is required.

Thank you


Solution

  • Since memory isn’t infinite, we need to limit the number of items stored in the In-Memory cache.

    MemoryCache VS Redis

    MemoryCache

    MemoryCache is embedded in the process , hence can only be used as a plain key-value store from that process.

    Redis

    Redis is a remote data structure server. It is certainly slower than just storing the data in local memory.

    I conclude that MemoryCache is running in the web server of the current application, and it is limited by the performance of the web server. Of course, it will be very fast under the same configuration. I think the disadvantage is that the stored data cannot be shared with other applications.

    If redis is used, reading data directly from memory is not as fast as memorycache, but it has high reliability and high scalability.

    Related Post:

    1. How to update redis after updating database?

    2. how to keep caching up to date

    3. How can MySQL update data in real time in redis cache?