作为 ASP.NET 网站的一部分,我维护本地化/文本翻译是使用存储在 SQL 数据库中的文本而不是使用 ResX 文件来处理的;为什么以这种方式完成取决于遗留问题,但这就是我们所做的,但它确实使我们能够相当轻松地进行更改。文本存储在这样的表中:
CREATE TABLE [Text](
[TextID] [int] NOT NULL,
[LanguageID] [int] NOT NULL,
[Text] [nvarchar](max) NULL
)
CONSTRAINT [PK_Text] PRIMARY KEY CLUSTERED
(
[TextID] ASC,
[LanguageID] ASC
)
并且网站中的代码隐藏将引用所选语言的文本 ID,以将正确的文本分配给 HTML 元素,例如标签等。
现在因为我们有这么多可用的文本并且在每个页面请求上访问数据库只是为了翻译一个页面非常慢,我们实际上所做的是在应用程序启动时使用HttpApplicationState将该表中的所有文本缓存到服务器内存中。
我们现在遇到的问题是,因为我们有几个 Web 服务器正在负载平衡,所以更新静态缓存变得很困难;我们现在必须等待应用程序池回收,然后才能看到所做的任何更改。同样正如上面的链接所暗示的:
...在应用程序状态下存储大块数据可能会填满服务器内存,导致服务器将内存分页到磁盘。
所以我想知道我可以使用什么其他解决方案?我需要能够缓存所有这些文本以获得更高的性能,但还需要能够比每天一次更频繁地更新它,并且能够跨多个服务器管理此缓存。