
eredis API速查大全Erlang Redis客户端 start_link/7、q、qp、q_async等全接口参考手册【免费下载链接】eredisErlang Redis client项目地址: https://gitcode.com/gh_mirrors/er/erediseredis是 Erlang 生态中专注于性能与健壮性的非阻塞 Redis 客户端支持任意 Redis 命令、事务、管道Pipeline、认证与多 DB、Pub/Sub 订阅等特性。本手册将 src/eredis.erl 与 src/eredis_sub.erl 两大模块的接口逐一整理成速查表涵盖start_link/7、q/2、qp/2、q_async等全部接口帮助新手快速上手连接与调用 Redis。 一分钟认识 eredis 的核心模块eredis 由两个模块组成分工清晰模块作用源码位置eredis普通读写连接执行任意 Redis 命令src/eredis.erleredis_sub专用订阅连接接收 Pub/Sub 消息src/eredis_sub.erl两者都是gen_server进程启动后得到一个客户端引用pid()或注册的名称后续所有接口都围绕它展开。 建立连接start_link 全参数速查连接入口是start_link从 0 参到 7 参共 8 种形式参数逐步可选——新手记住start_link/7就掌握了全部。start_link/7 参数总表完整定义见 src/eredis.erl#参数默认值说明1Host127.0.0.1主机地址也支持{local, /path/sock}连接 Unix 域套接字2Port6379端口号3Database0数据库编号SELECT到指定 DB4Password认证密码为空则跳过认证5ReconnectSleep100断线重连间隔毫秒可设为no_reconnect关闭自动重连6ConnectTimeout5000连接与调用超时毫秒7SocketOptions[]额外套接字选项透传给gen_tcp最常用调用方式%% 默认连接本机0 参等价于 127.0.0.1:6379 {ok, C} eredis:start_link(). %% 指定主机与端口2 参 {ok, C} eredis:start_link(192.168.1.10, 6379). %% 带密码、指定 DB、关闭自动重连完整 7 参 {ok, C} eredis:start_link(192.168.1.10, 6379, 1, secret, no_reconnect, 5000, []). %% 通过 Unix 套接字连接 {ok, C} eredis:start_link({local, /var/run/redis.sock}, 0).属性列表形式1 参start_link/1接收一个proplists专为poolboy连接池场景设计键名与 7 参一一对应host、port、database、password、reconnect_sleep、connect_timeout、socket_options见 src/eredis.erl。关闭连接eredis:stop(C). %% 见 src/eredis.erl#L78-L79⚡ 同步执行命令q/2 与 q/3q/2是 eredis 的主力接口向指定连接执行一条 Redis 命令阻塞等待响应。命令以列表形式传入参数会被自动转换为二进制返回值始终是二进制或二进制的嵌套列表。定义见 src/eredis.erl{ok, OK} eredis:q(C, [SET, foo, bar]). {ok, bar} eredis:q(C, [GET, foo]).接口行为返回值q/2同步执行使用默认 5000ms 超时{ok, 返回值}或{error, 错误原因二进制 \| no_connection}q/3同步执行自定义超时毫秒同上⚠️小提醒浮点数不能直接写入 Redis——q/2传入 float 会抛出{cannot_store_floats, 值}请自行转为字符串或整数见 src/eredis.erl 的转换逻辑。常见命令示例全部走 q/2%% 批量写入 / 读取 {ok, OK} eredis:q(C, [MSET, k1, v1, k2, v2]). {ok, Values} eredis:q(C, [MGET, k1, k2]). %% 事务MULTI → 命令排队 → EXEC {ok, OK} eredis:q(C, [MULTI]). {ok, QUEUED} eredis:q(C, [SET, foo, bar]). {ok, Resps} eredis:q(C, [EXEC]). 管道批量执行qp/2 与 qp/3一次网络往返执行多条命令——这就是 Pipeline 的威力。qp/2接收命令列表按顺序返回每条命令的结果显著降低高吞吐场景的延迟。定义见 src/eredis.erl接口行为返回值qp/2管道执行默认 5000ms 超时结果列表[{ok, 值} \| {error, 原因}, ...]无连接时为{error, no_connection}qp/3管道执行自定义超时同上Pipeline [[SET, a, 1], [SET, b, 2], [GET, a], [GET, b]]. {ok, ...} - ... Results eredis:qp(C, Pipeline). %% Results [{ok, OK}, {ok, OK}, {ok, 1}, {ok, 2}] 不等待响应q_noreply/2有些命令你根本不需要结果如写缓存、发通知q_noreply/2以cast方式发出后立即返回ok忽略任何错误——比q/2快得多也不会在超时时无谓阻塞。定义见 src/eredis.erlok eredis:q_noreply(C, [SET, counter, 100]). 异步执行并回调q_async/2 与 q_async/3q_async是 Erlang 风格的异步调用立即返回ok等 Redis 响应到达后通过Erlang 消息通知你消息格式为{response, Reply}Reply与q/2的返回值一致。定义见 src/eredis.erl接口通知目标适用场景q_async/2当前进程self()同进程内并发发起多个请求q_async/3指定Pid或注册名由专门的消息消费进程统一处理响应%% 在接收方进程的循环里处理响应 {response, {ok, hello}} - handle_result(), Pub/Sub 订阅eredis_sub 接口全览订阅场景必须使用独立客户端src/eredis_sub.erl。核心思路启动订阅进程 → 指定一个控制进程controlling process→ 由它接收所有 Pub/Sub 消息。启动与关闭接口说明start_link/0默认连接本机同eredisstart_link/3Host, Port, Password见 src/eredis_sub.erlstart_link/6增加ReconnectSleep、MaxQueueSize、QueueBehaviourdrop丢弃或exit退出见 src/eredis_sub.erlstart_link/1属性列表形式host、port、password、reconnect_sleep、max_queue_size、queue_behaviour供 poolboy 使用stop/1停止订阅客户端⚙️背压控制当消息队列达到MaxQueueSize上限时drop策略会丢弃最旧消息并通知控制进程防止订阅太慢拖垮系统。订阅管理四件套{ok, Sub} eredis_sub:start_link(). eredis_sub:controlling_process(Sub). %% 当前进程接收消息 eredis_sub:subscribe(Sub, [news]). %% 订阅频道 eredis_sub:psubscribe(Sub, [log.*]). %% 模式订阅通配符 eredis_sub:unsubscribe(Sub, [news]). %% 取消订阅 eredis_sub:punsubscribe(Sub, [log.*]). %% 取消模式订阅 Channels eredis_sub:channels(Sub). %% 当前订阅的频道列表接口定义见 src/eredis_sub.erl。控制进程会收到的 6 种消息消息类型文档见 src/eredis_sub.erl消息含义{message, 频道, 内容, 客户端pid}普通订阅收到的消息必须先确认{pmessage, 模式, 频道, 内容, 客户端pid}模式订阅收到的消息{subscribed, 频道, 客户端pid}Redis 确认订阅成功{unsubscribed, 频道, 客户端pid}Redis 确认取消订阅{dropped, 丢弃数量, 客户端pid}队列溢出被丢弃的消息数{eredis_disconnected, 客户端pid}/{eredis_connected, 客户端pid}断线 / 自动重连成功⚠️关键规则每收到一条{message, ...}必须调用eredis_sub:ack_message/1确认后才能收到下一条见 src/eredis_sub.erl这是防止控制进程被消息淹没的流控机制。%% 一个典型的接收循环骨架 loop(Client) - receive {message, Channel, Msg, Client} - process(Channel, Msg), eredis_sub:ack_message(Client), loop(Client); {eredis_disconnected, Client} - loop(Client) end.模块内还内置了可运行的演示sub_example/0、pub_example/0、psub_example/0、ppub_example/0方便对照学习。 快速选型4 种调用方式怎么选你的需求选择一句话理由需要拿到结果一条命令q/2最简单直接需要拿到结果批量命令qp/2一次往返吞吐更高需要结果但要并发多个请求q_async/2不阻塞消息回调不需要结果q_noreply/2最快立即返回 返回值与类型速查同步接口统一返回{ok, 值}或{error, 原因}no_connection表示连接不可用。return_value()的类型为undefined | binary() | [binary() | 嵌套列表]完整类型定义见 include/eredis.hrl。q_async的回调消息包装为{response, Reply}。✍️ 小结连接start_link/7一个接口覆盖全部参数stop/1关闭。读写q/2同步、qp/2管道、q_async异步、q_noreply/2不等待——四选一即可覆盖 99% 场景。订阅eredis_sub独立客户端 控制进程 ack_message/1流控牢记三件事。配合 README.md 中的快速上手示例这份速查手册足以让你在 Erlang 项目里熟练使用 Redis 客户端。【免费下载链接】eredisErlang Redis client项目地址: https://gitcode.com/gh_mirrors/er/eredis创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考