Redis快速文件系统搜索

时间:2014-01-06 22:28:17

标签: search redis

我是Redis的新手,而且 我想迭代给定计算机上的所有文件和文件夹并将其保存在Redis DB中, 所以我可以稍后用他们的名字搜索文件或文件夹。

我想知道如何将数据存储在Redis中以及如何尽可能快地进行搜索?

由于

1 个答案:

答案 0 :(得分:1)

您的要求可分为:

  1. 迭代并保存在Redis中。
  2. 从Redis获取并搜索。
  3. 数据类型的选择取决于数据的使用情况。

    Redis为我们提供了“KEY / VALUE”关系。

    取一些样本数据:

     File Name        Location
       ----------------------------
       Sys.log           /root/tmp
       info.txt          /var/log
       redis.log         /var/log/redis/redis.log
       abc.log           /app/task
       abc.log           /home/test 
    

    注意在不同位置可能有n个同名文件。这意味着我们不能将普通的键/值与文件名一起用作键。

    应该记住的一个关系是亲子。目录(父)将具有文件(子)或其他目录。

    还应该有一种方法来区分文件和目录。

    解决方案:

    • 迭代文件系统并存储在REDIS中 (目录设计)

    创建Redis目录集,其内容为文件名,其他目录也有自己的列表。

    列表中的每个输入都应该有一个前缀,可以用来标识该条目是文件还是目录。如果它是一个目录,那么您可以使用它来进一步搜索更多文件。

    这使我们能够使用这些套装打印所有孩子。

       127.0.0.1:6379> SADD "/var/log" "File:info.txt"
        (integer) 1
        127.0.0.1:6379> SMEMBERS "/var/log" 
        1) "File:info.txt"
        127.0.0.1:6379> SADD "/var/log" "Dir:redis"
        (integer) 1
        127.0.0.1:6379> SMEMBERS "/var/log" 
        1) "Dir:redis"
        2) "File:info.txt"
    
    
    
         content of redis
        127.0.0.1:6379> SADD "redis" "redis.log"
        (integer) 1
        127.0.0.1:6379> SADD "redis" "error.log"
        (integer) 1
        127.0.0.1:6379> SMEMBERS redis
        1) "redis.log"
        2) "error.log"
    
    • 搜索REDIS (输入文件名打印出现的所有可能位置。)

      在我们为目录创建集合时迭代文件系统,我们并行创建一个存储的hashmap。

      文件列表的内容将显示它所在的位置。

      127.0.0.1:6379> lpush "info.txt" "/var/log"
      (integer) 1
      127.0.0.1:6379> lpush "info.txt" "/tmp"
      (integer) 2
      127.0.0.1:6379> lrange "info.txt" 0 -1
      1) "/tmp"
      2) "/var/log"
      

    注意:为了快速体验REDIS,请一次尝试并执行一组命令.i.e使用multi或使用eval(lua脚本)。

    希望这能为您的设计提供一个开始。