Как запустить 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.