一个星期以来,我一直在思考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变量?

最佳答案

有几种解决方案:

  • 在本地或全局注册Redis连接
  • 使用像gproc的进程寄存器
  • 在Webmachine资源上下文中保留连接的pid
  • 使用像poolerpoolboy的连接池
  • ,如果您不想在池中排队请求,则dispcount可能适合


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

    Webmachine和eredis都是Erlang applications following the OTP principles。如果您的应用程序符合OTP规范,则可以将ededis添加到applications文件中的.app中,如下所示:
    {application, awesome_app, [
        {description, "My awesome app."},
        {vsn, "0.0.1"},
        {modules, []},
        {registered, []},
        {applications, [kernel, stdlib,
                        eredis,
                        webmachine]}
    ]}.
    

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

    Rebar是您构建和生成发行版(more info here)的 friend 。钢筋的替代方法是sinan,它在this article中进行了描述。

    10-02 22:22