问题
I am using ASP.NET's data caching API. For example:
HttpRuntime.Cache.Insert(my_data, my_key);
Is there any way to configure cache so its contents are preserved when the App Domain recycles?
I load many object into cache, but there is a substantial delay re-loading these every time the app domain restarts. Assume for this question that I can't prevent the appdomain restart due to a server configuration.
回答1:
Is there any way to configure cache so its contents are preserved when the App Domain recycles?
No. The Cache object holds references in RAM. Period.
Alternatives:
- Out-of-process Session state (although that's per-user)
- Distributed cache
- Use SQL Server as a cache (where it keeps data in memory, rather than on disk)
- Write the objects to disk at the web tier
I generally prefer #3 myself, although there are scenarios where the others are appropriate.
回答2:
Recycling the appdomain dumps the cache. If you want to get around this you'd need to use a distributed cache. Here's an example.
回答3:
For your most expensive data you can cache the objects with a distributed cache such as Memcached or velocity. Depending on the size of the object and the length of runtime you could also serialize it to disk or to your database provided that the access speed to these resources is less than the time to create the object.
Now since the in-proc cache is super fast compared to any other solution since it just holds a reference to the memory object you will want to use it where possible. You can keep a copy of your cached object on disk until it is lost and then re-create it from that and place it in memory. Where this is tricky is when you have to expire the data so only use the cache/disk/sql combo where you won't need to expire/invalidate the data otherwise you will need to ensure that you clear both. This will also get around not being able to implement distributed caching on a shared server for example.
来源:https://stackoverflow.com/questions/1766657/asp-net-data-cache-preserve-contents-after-app-domain-restart