一尘不染

如何使Webmachine和eredis一起工作?

redis

一个星期以来,我一直在思考Webmachine应用程序中Redis使用的问题。而且我还没有开悟。

我将使用Eredis,这是用法示例:

{ok, Con} = eredis:start_link().

{ok, <<"OK">>} = eredis:q(Con, ["SET", "foo", "bar"]).
{ok, <<"bar">>} = eredis:q(Con, ["GET", "foo"]).

据我了解,eredis:start_link()应该只在某个地方调用一次。但是,如何获得Con资源的可变性呢?


阅读 254

收藏
2020-06-20

共1个答案

一尘不染

有几种解决方案:

  • 在本地或全局注册Redis连接
  • 使用gproc之类的进程寄存器
  • 将连接的pid保留在webmachine资源上下文中
  • 使用连接池,例如poolerpoolboy
  • 万一您不想在池折扣中将请求排队就可以了

编辑:被误解的问题,下面的第一个答案:

Webmachine和eredis都是遵循OTP原理的
Erlang
应用程序。如果你的应用是OTP符合你可以eredis添加到applications您的.app文件,如下所示:

{application, awesome_app, [
    {description, "My awesome app."},
    {vsn, "0.0.1"},
    {modules, []},
    {registered, []},
    {applications, [kernel, stdlib, 
                    eredis, 
                    webmachine]}
]}.

OTP兼容应用程序使用发行版。创建发行版并启动应用程序之后,applications将在其中启动应用程序。

Rebar是您构建和生成发行版的朋友(更多信息,请参见此处)。本文将介绍使用sinan替代钢筋的方法。

2020-06-20