5

我想将一个数据结构持久地存储在 RAM 中,并可以从 Perl 中的预分叉 Web 服务器进程访问它。

理想情况下,我希望它表现得像 memcached 但不需要单独的守护进程。有任何想法吗?

4

3 回答 3

10

使用Cache::FastMmap,你只需要一个文件。它使用mmap为 IPC 提供共享的内存缓存,这意味着它非常快。有关可能的问题和警告,请参阅文档。

于 2010-06-19T11:53:32.117 回答
6

IPC::SharedMem可能符合要求。

于 2010-06-19T11:52:54.753 回答
0

Mod_perl 在正确实施写时复制分叉的系统上共享 RAM。将 Perl 哈希加载到 mod_perl 程序的 BEGIN 块中,只要没有写入存储哈希的页面,mod_perl 程序的所有分叉实例都将共享内存。这并不完美(某些页面会被写入),但在我的服务器和数据上,它会将内存使用量减少 70-80%。

Mod_perl 还通过消除 Perl 在后续 Web 请求中的编译时间来加速您的服务器。mod_perl 的缺点是您必须仔细编程,并避免使用修改全局变量的程序,因为这些变量,如您的哈希,由所有 mod_perl 实例共享。学习足够多的 Perl 是值得的,这样您就不需要更改全局变量了!

mod_perl 带来的性能提升非常棒,但 mod_perl 在许多共享主机中不可用。它很容易搞砸,而且在你学习的时候很难调试。只有当我的客户对性能改进足够赞赏以证明我的开发痛苦时,我才会使用它。

于 2010-06-20T06:26:45.910 回答