0

语境

我正在用红宝石制作游戏。它有一个名为 Character 的模型,具有 和 之类的energy属性money。一个角色可以有一个行为,例如sleeping。最后,Character 有一个tick调用其行为方法的方法sleep!。简化后看起来像这样:

class Character
  attr_accessor :energy

  def initialize(behavior)
    @current_behavior = behavior
  end

  def tick
    self.send "#{@current_behavior}!"
  end

  private

    def sleep!
      self.energy -= 1 if energy > 0
    end

end

与许多游戏一样,每个角色的 tick 方法需要每n分钟调用一次。我想为此使用 EventMachine。在它调用的周期性计时器Character.tick_all中,应该调用tick每个 Character 实例的方法。

问题

我可以为此使用哪种持久性引擎?在服务器启动时,我想将所有 Character 实例加载到内存中,以便它们可以被勾选。现在,如果每个实例在其状态更改后由于滴答声而保持不变,则可以。

我已经用 Rails 和 ActiveRecord 试过了。但是对于每个滴答,它至少需要一个写入和读取操作,这似乎有点矫枉过正。

编辑 我调查过SuperModel。它似乎完全符合我的要求,但它的最后一次提交是大约一年前......

4

1 回答 1

0

对于内存中数据的简单查找和存储,据我所知有两种选择:

  • Memcached:这是最简单的键值存储之一,允许轻松设置和获取与键关联的值。但是,一旦您终止该进程,所有内存都会被刷新/销毁,并且存储来自用户的数据有点问题

  • Redis:Redis 提供了 Memcached 的所有简单键值查找功能等等。除此之外,Redis 非常擅长处理哈希,Redis 提供集合功能(= 不存储重复项)和排序集合功能(例如,用于评分和排名项目)。此外,Redis 会跟踪文件系统上的数据,这在您需要不时重启进程时非常有用。

于 2013-05-07T19:47:15.480 回答