【问题标题】:How can I use a random redis command for redisbloom如何使用随机 redis 命令进行 redisbloom
【发布时间】:2020-01-20 14:54:19
【问题描述】:

我将 perl Redis.pm 用于所有带有 redis 的 sys 作业 模块中提供了所有标准的 redis 命令

但是对于自定义加载模块,我如何在 perl 中使用它

例如 Redisbloom

在命令行上可以正常工作

127.0.0.1:6379> bf.add names tom
(integer) 1

我不确定我能做什么是 perl 脚本。这不起作用

my $n = $redis->cmd("bf.add","names","tom");

【问题讨论】:

    标签: perl redis bloom-filter


    【解决方案1】:

    我会尝试:

    use Redis;
    my $redis = Redis->new;
    my $n = $redis->__std_cmd("bf.add", "names", "tom");
    

    Perl 客户端无法在命令名称中使用句点 - 这似乎可以解决这个问题。

    【讨论】:

      【解决方案2】:

      据我所知,Redis 模块不支持调用自定义命令。 Mojo::Redis 会。

      use strict;
      use warnings;
      use Mojo::Redis;
      my $redis = Mojo::Redis->new('redis://127.0.0.1:6379/0')->encoding(undef);
      $redis->db->call('bf.add', 'names', 'tom');
      

      注意这里的 encoding 属性设置为undef 以匹配 Redis 模块的行为 - 如果您将处理任何非 ascii 文本数据并希望将其自动编码和解码以进行存储,您可以将其保留为默认的 UTF-8

      【讨论】:

      • 这行得通,但有一个问题,每次我调用“call”方法时 2 redis 调用都是 exiecute “SELECT”“0”“bf.add”“names”“tom”我可以避免SELECT ,可能会影响性能
      • @Ram 这来自于调用->db,因为我在URL 中明确指定了0 数据库。您可以删除显式 /0(它是默认值)或获取一次 db 对象并将其重用于多个命令。 my $db = $redis->db; $db->call(...); 在长时间运行的过程中,您不想永远保留db,它在断开连接或分叉的情况下无法重新连接。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-08
      • 2015-06-25
      • 1970-01-01
      • 1970-01-01
      • 2020-02-11
      • 2013-11-23
      • 1970-01-01
      相关资源
      最近更新 更多