【问题标题】:How to import data from a file into Redis database?如何将文件中的数据导入 Redis 数据库?
【发布时间】:2014-07-10 15:13:39
【问题描述】:

我是 Redis 的菜鸟,这是我第一次使用这个应用程序。希望你能帮助我。 我正在尝试从字典中创建一个单词列表并放入 Redis 数据库。我有一个包含 200,000 个单词的文本文件。我怎样才能把它放在我的数据库中?

我正在使用 Laravel,我的 Redis 配置工作正常,因为我能够执行此命令。

$redis = Redis::connection();
Redis::set('name', 'MYname');
$name = Redis::get('name');
echo $name;

提前致谢!

【问题讨论】:

    标签: laravel database redis


    【解决方案1】:

    字典是干什么用的? 如果只有 20 万字,你可以简单地将它们全部放在一个集合中。

    for word in text_file:
        Redis::sadd('dictionary_name', word)
    

    并使用

    Redis::sismember('dictionary_name', word)
    

    检查该词是否在字典中。

    这里是关于redis set的文档

    【讨论】:

    • 感谢您的回复。抱歉,我对 Redis 很陌生。 Redis::sadd('dictionary_name', word) 会执行一次还是我需要为每个单词执行一次?
    • sadd 可以接受一堆成员(但坦率地说,我不知道它是否可以接受一个包含 200,000 个成员的数组)。 sadd 的时间复杂度为:O(N) 其中 N 是要添加的成员数。因此,使用带有 200,000 个参数的单个 sadd 和使用带有 1 个参数的 for 循环都需要 O(N) 时间。在这种情况下,我认为 for 循环很好。如果数量远远超过 200,000,也许将它们分成批次是更好的解决方案。
    • 好的,我明白了。我会尝试你的解决方案。非常感谢!
    • 一次加载 200K 字没有问题 - 大约 3MB(例如 SOWPODS),但另一个考虑因素是您的应用程序是否使用远程 Redis 服务器。如果你需要通过网络,你会想要“批处理”你的操作以最小化延迟,所以 1)我会避免为每个单词做 SADD 和 2)使用 Redis 的流水线。
    • @ItamarHaber 我忘了提到流水线。感谢您添加。您的信息非常丰富且鼓舞人心,谢谢
    【解决方案2】:

    最后,我可以通过这个命令上传我的数据了。

    $filename = 'file.txt';
    
    $fp = @fopen($filename, 'r'); 
    
    if ($fp) {
        $array = explode("\n", fread($fp, filesize($filename)));
    }
    
    $redis = Redis::connection();
    Redis::sadd('dictionary', $array);  
    

    【讨论】:

    • 行读取 $redis = Redis::connection();似乎什么也没做,是吗? $redis 没有被引用。
    • 我相信 OP 正在使用 Laravel Facades,这就是为什么它没有被任何地方引用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-14
    • 1970-01-01
    • 2014-02-02
    • 1970-01-01
    • 1970-01-01
    • 2012-10-24
    相关资源
    最近更新 更多