Как запустить Redix в дереве наблюдения в приложении чата phoenix elixir и получить доступ из другого модуля?

Я хочу использовать шестнадцатеричный пакет {:redix, "~> 0.6.1"} в своем приложении чата и запускать в дереве наблюдения

{:ok, conn} = Redix.start_link()
{:ok, conn} = Redix.start_link(host: "example.com", port: 5000)
{:ok, conn} = Redix.start_link("redis://localhost:6379/3", name: :redix)


Redix.command(conn, ["SET", "mykey", "foo"])

но выдает ошибку, когда я пытаюсь поставить ссылку на начало соединения на дочерний процесс

children = [
      # Start the Ecto repository
      supervisor(PhoenixChat.Repo, []),
      # Start the endpoint when the application starts
      supervisor(PhoenixChat.Endpoint, []),
      # Start your own worker by calling: PhoenixChat.Worker.start_link(arg1, arg2, arg3)
      # worker(PhoenixChat.Worker, [arg1, arg2, arg3]),
      supervisor(PhoenixChat.Presence, []),

      #supervisor(Phoenix.PubSub.Redis, [:chat_pubsub, host: "127.0.0.1"])
    ]

Как я могу установить соединение redix и сохранить данные в Redis?

2 ответа

Решение
  children = [
      # Start the Ecto repository
      supervisor(PhoenixChat.Repo, []),
      # Start the endpoint when the application starts
      supervisor(PhoenixChat.Endpoint, []),
      # Start your own worker by calling: PhoenixChat.Worker.start_link(arg1, arg2, arg3)
      # worker(PhoenixChat.Worker, [arg1, arg2, arg3]),
      supervisor(PhoenixChat.Presence, []),
      worker(Redix, [[], [name: :redix]]),

      #supervisor(Phoenix.PubSub.Redis, [:chat_pubsub, host: "127.0.0.1"])
    ]




Redix.command(:redix, ["SET", "key", "value"])

Что вы хотите сделать, это Register идентификатор процесса Для этого вы обычно можете указать его имя в опциях, например так:

worker(Redix, [[], [name: RedixConnection]])

Когда процесс регистрируется обычно, вы можете использовать его имя вместо PID (всегда проверяйте документацию, но это обычная схема), например:

Redix.command(RedixConnection, ["PING"])

В большинстве случаев одного соединения недостаточно. Вы, вероятно, хотите использовать какой-то механизм объединения, такой как poolboy, В документации есть очень аккуратная страница для чтения, которая называется Real-world usage, Он, вероятно, ответит на большинство вопросов, связанных с этой темой.

Также подумайте об использовании встроенных решений Erlang/Elixir для вашей цели. Я не знаю вашего точного варианта использования, но вы можете проверить ETS, DTS и Mnesia.

Другие вопросы по тегам