我是Redis的新手,而且 我想迭代给定计算机上的所有文件和文件夹并将其保存在Redis DB中, 所以我可以稍后用他们的名字搜索文件或文件夹。
我想知道如何将数据存储在Redis中以及如何尽可能快地进行搜索?
由于
答案 0 :(得分:1)
您的要求可分为:
数据类型的选择取决于数据的使用情况。
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目录集,其内容为文件名,其他目录也有自己的列表。
列表中的每个输入都应该有一个前缀,可以用来标识该条目是文件还是目录。如果它是一个目录,那么您可以使用它来进一步搜索更多文件。
这使我们能够使用这些套装打印所有孩子。
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脚本)。
希望这能为您的设计提供一个开始。