【问题标题】:MVC - How to cache frequently used and changed User_Data (for web game)MVC - 如何缓存经常使用和更改的 User_Data(用于网页游戏)
【发布时间】:2014-10-02 18:40:34
【问题描述】:

我正在尝试开发网页游戏。在那个游戏中,我有一个工具栏,它几乎显示在所有页面上。工具栏包含用户信息,例如: - 硬币(现金) - 等级 - 姓名 - 组的名字 - 经验值 - 技能 - 通知

还有更多...

其中一些变化很少,但一些(如经验、技能、通知或硬币)可能会经常变化。

所以,我不想每次有人重新加载页面时都查询数据库。我正在考虑将此数据缓存在服务器的内存中(每次发生变化时更新它)。

有什么已知的好方法吗?或者我应该忘记并在每个页面加载时进行额外的 2-3 个 SQL 查询?

【问题讨论】:

    标签: asp.net sql-server asp.net-mvc caching


    【解决方案1】:

    “经常更改”几乎不包括缓存。我认为对优化的痴迷使人们想要缓存所有内容,但是您有一个数据库是有原因的,偶尔查询它是完全可以接受的。

    不过,您可以做的是缓存部分。像Level 这样的东西通常不会经常改变,因为从一个到另一个需要一段时间。这可以被缓存,并且很容易在级别更改时破坏缓存,以便随后强制重新加载。其他诸如Coins 之类的用户应该始终拥有最新且准确的计数。显然,您必须做出这些决定。

    不过,无论长短,如果用户应该始终准确计数显示的事物,那么您根本无法缓存它。继续做你需要做的查询然后继续。

    【讨论】:

    • 谢谢克里斯。我将拆分这些数据。所有频繁变化的数据都可以轻松地从主用户表中加载,例如硬币、等级、经验,我将从数据库中查询,但更高级的数据,例如技能和最新通知 - 我将存储在内存中。
    【解决方案2】:

    这是单用户游戏还是多用户游戏?如果它是一个多用户游戏,那么您将必须为游戏中所有当前活跃的玩家保留某种玩家状态,这是此信息的完美位置。如果是单用户游戏,那么您可能希望在服务器上保持尽可能少的状态,以便您更有可能从磁盘加载它,或者使用分布式缓存系统。

    这里的问题是,我们无法真正告诉您该怎么做,因为所有这些都取决于太多的因素……您只需要在进行过程中弄清楚这一点。

    不过,我的建议是,不要过早地认为您需要优化某些东西。随心所欲地去做,如果你需要更好的性能,那么以后再担心。

    【讨论】:

    • 这是多用户游戏,您的提示很棒:],谢谢!我忘记了无论如何我都需要一些在线用户列表在服务器端,这将是存储大部分数据的理想场所。
    猜你喜欢
    • 2013-02-06
    • 1970-01-01
    • 2012-08-08
    • 2010-12-10
    • 1970-01-01
    • 2017-11-08
    • 1970-01-01
    • 2023-04-10
    • 2016-11-25
    相关资源
    最近更新 更多