我现在想要一个在一个函数中创建redis的连接对象保存起来,在其他函数中不使用传参的前提下使用这个连接对象的Erlang代码
时间: 2024-03-17 15:40:12 浏览: 158
好的,下面是一个示例代码,它演示了如何在一个函数中创建Redis连接对象并将其保存为全局变量,然后在应用中的其他函数中使用该连接对象而不需要传递它作为参数。
```
-module(redis_demo).
-export([start/0, put/1, get/0]).
-define(REDIS_HOST, "localhost").
-define(REDIS_PORT, 6379).
-define(REDIS_PASSWORD, "password").
% 启动应用时创建 Redis 连接
start() ->
application:set_env(redis_demo, conn, connect()),
ok.
% 在 put 函数中使用 Redis 连接,将 Pid 存储到 Redis 中
put(Pid) ->
Conn = get_conn(),
eredis:q([<<"SET">>, <<"Pid">>, Pid], Conn),
ok.
% 在 get 函数中使用 Redis 连接,从 Redis 中读取 Pid
get() ->
Conn = get_conn(),
{ok, Pid} = eredis:q([<<"GET">>, <<"Pid">>], Conn),
Pid.
% 连接 Redis
connect() ->
{ok, Conn} = eredis:start_link([{host, ?REDIS_HOST},
{port, ?REDIS_PORT},
{password, ?REDIS_PASSWORD}]),
Conn.
% 获取 Redis 连接
get_conn() ->
application:get_env(redis_demo, conn).
```
在这个示例代码中,`start/0`函数在应用启动时调用`connect/0`函数创建Redis连接对象,并将其保存为应用的环境变量。`put/1`和`get/0`函数都调用`get_conn/0`函数获取Redis连接对象,并使用该连接对象进行操作。
`connect/0`函数用于创建Redis连接对象,并返回它。`get_conn/0`函数用于从应用环境变量中获取Redis连接对象。这样,我们就可以在应用的任何函数中使用`get_conn/0`函数获取Redis连接对象,而不需要传递它作为参数。
需要注意的是,如果在不同的应用中使用相同的环境变量名称,可能会导致命名冲突和应用行为不可预测。因此,建议为每个应用使用唯一的环境变量名称。
阅读全文