gpt4 book ai didi

Erlang 和 Redis : read performance

转载 作者:IT王子 更新时间:2023-10-29 06:07:51 24 4
gpt4 key购买 nike

我在尝试从 Redis 排序集中读取 1M 记录时突然遇到性能问题。我使用了 ZSCAN,光标和批量大小为 5K。

代码是在托管 Redis 的同一台机器上使用 Erlang R14 执行的。接收 5K 元素批处理需要将近 1 秒。不幸的是,我在这台机器上编译 Erlang R16 失败了,但我认为这没有关系。

相比之下,带有 node_redis(hiredis 解析器)的 Node.js 代码在 2 秒内完成 1M。 Python 和 PHP 的结果相同。

也许我做错了什么?

提前致谢。

这是我的 Erlang 代码:

-module(redis_bench).
-export([run/0]).

-define(COUNT, 5000).

run() ->
{_,Conn} = connect_to_redis(),
read_from_redis(Conn).

connect_to_redis() ->
eredis:start_link("host", 6379, 0, "pass").

read_from_redis(_Conn, 0) ->
ok;
read_from_redis(Conn, Cursor) ->
{ok, [Cursor1|_]} = eredis:q(Conn, ["ZSCAN", "if:push:sset:test", Cursor, "COUNT", ?COUNT]),
io:format("Batch~n"),
read_from_redis(Conn, Cursor1).

read_from_redis(Conn) ->
{ok, [Cursor|_]} = eredis:q(Conn, ["ZSCAN", "if:push:sset:test", 0, "COUNT", ?COUNT]),
read_from_redis(Conn, Cursor).

最佳答案

10 次中有 9 次,像这样的缓慢是驱动程序编写错误的结果,而不是系统的结果。在这种情况下,将请求管道化到 Redis 的能力将变得很重要。像 redo 这样的客户端可以进行流水线操作,而且速度可能更快。

另外,注意只测量一个进程/线程。如果您想要快速并发访问,通常会与快速顺序访问相平衡。

关于Erlang 和 Redis : read performance,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22577849/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com