当前位置: 首页 > 编程语言 > C#

50GB的HttpRuntime.Cache持久化是否可行?分享

时间:2023-04-10 22:22:09 C#

50GBHttpRuntime.Cache持久化可能吗?我们有一个从数据库中提取复杂数据结构的ASP.NET4.0应用程序,它需要12多个小时才能进入内存中的数据结构(稍后存储在HttpRuntime.Cache中)。数据结构的大小正在快速增长,如果应用程序重新启动,我们不能继续等待12+小时才能将其放入内存。如果您正在更改web.config或Web应用程序中导致重启的任何代码,这将是一个主要问题-这意味着在使用该应用程序之前需要等待很长时间并阻碍开发或更新部署。数据结构必须在内存中才能以网站可用的速度工作。内存数据库,如memcache或Redis,与HttpRuntime.Cache相比速度较慢,并且在我们的情况下不起作用(内存数据库必须序列化put/get,而且它们不能相互引用,它们使用最重要的是查找密钥-会降低性能,并且使用大量密钥,性能会迅速下降)。性能是必须的。我们想要做的是在应用程序结束(重新启动时)之前快速将HttpRuntime.Cache转储到磁盘,并能够在应用程序再次启动时立即将其加载回来(希望在几分钟内而不是12小时左右)天空)。内存结构约为50GB。有没有办法解决这个问题?内存数据库,如memcache或Redis,与HttpRuntime相比速度较慢。Cache是的,但与12小时以上的轮换相比它们非常快。就个人而言,我认为您在这里采用了错误的方法来强制加载50GB的结构。只是一个建议,但我们正在使用HttpRuntime.Cache作为多层缓存策略的一部分:关键是,我们在加载时不需要内存中的任何东西-它在需要时被填充,并且从那时起它很快。我们还使用pub/sub(同样由redis提供服务)来确保缓存失效是及时的。最终结果:寒冷时足够快,温暖时也很快。基本上,我会考虑在做任何事情之前避免需要50GB数据的任何事情。如果此数据不是真正的缓存,而是您的数据,我会看一下对象模型的正确序列化。我建议将protobuf-net(我作为作者有偏见)作为一个强有力的候选人——非常快且输出非常小。以上是C#学习教程:50GBHttpRuntime.Cache持久化是否可行?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: