【问题标题】:Ruby open shared memory blockRuby 开放共享内存块
【发布时间】:2017-01-06 21:48:05
【问题描述】:

有没有办法用Ruby打开共享内存块,相当于PHP中的shmop_open

我有一个进程定期更新内存块。我的 Rails 应用需要读取这些数据。

【问题讨论】:

  • 假设你可以,你为什么会呢?似乎您的解决方案超出了 Ruby 解决问题的方法的范围。
  • 我们的基础设施将我们的客户端数据库托管在不同的服务器中,每当我们启动服务器时,我们都会在内存中托管我们的客户端地址。我想快速访问内存中的这些数据,而不是主数据库查询。
  • 典型的处理方式是环境变量,而不是任意内存地址。 blog.honeybadger.io/ruby-guide-environment-variables
  • 注意:您将遇到的部分问题是您将绕过 Ruby 将这些字节转换为对象的功能。我找到了this library,但我无法想象跳过这些障碍比更新您的基础架构以利用环境变量更容易。
  • @coreyward 共享内存(可能与String#unpack 结合使用)比环境变量更强大、更灵活。尝试将大量数据放入ENV 或修改另一个进程的ENV 以获取简单示例。

标签: ruby shared-memory


【解决方案1】:

你有几个作为宝石的选择,但我自己从未使用过它们。

sysvmq 实现 System V IPC 消息队列。

posix-mqueues 实现 POSIX 消息队列。

【讨论】:

    【解决方案2】:

    不妨试试hammerspace

    我们将其用作生产机器上翻译和配置的缓存层。

    您可以有一个进程定期更新hammerspace 文件,然后所有rails 进程都可以使用它。当hammerspace 访问该文件时,该文件得到内存映射,因此它是事实上的共享内存。

    https://github.com/airbnb/hammerspace

    【讨论】:

      猜你喜欢
      • 2013-01-18
      • 1970-01-01
      • 2011-07-31
      • 2016-02-24
      • 1970-01-01
      • 2013-09-30
      • 1970-01-01
      • 1970-01-01
      • 2014-10-08
      相关资源
      最近更新 更多