我在Spring和Redis上都很新。我想知道是否有办法通过值获取KEY?
我的KEY的格式如下:“{strong> typeOfFile }:{ id }:{ filename }”
typeOfFile 可以是“image”,“html”或“pdf”。
例如,我希望使用给定的 fileHash 和 content 获取 image 类型的文件的KEY。我是这样想的:
private String getKeyByVal(final String givenFileHash, final String content) {
// get all keys that starts with "image"
Set<String> keys = redisTemplate.keys("image*");
if (keys != null) {
for (String key : keys) {
Map<Object, Object> val = redisTemplate.opsForHash().entries(key);
// check if the value of KEY is equal to the given fileHash
if (val.get("fileHash").equals(givenFileHash) && val.get("content").equals(content)) {
return key;
}
}
}
}
然而,有人告诉我这是非常昂贵的,因为我得到所有以“image”开头的键,并手动检查所有键。
现在我在想,如果我可以通过值获得KEY,那也许会好得多。这样就可以更容易地获得所有属性。在Redis中可以吗?
答案 0 :(得分:0)
不,这在Redis中是不可能的。但是,您可以同时存储反向地图,如下所示:
fileHash -> "{typeOfFile}:{id}:{filename}"
此解决方案假定文件哈希是唯一的。如果散列不是唯一的,那么您可以存储一组具有相同散列的id,检索每个散列的内容并进行比较。仍然比原始解决方案快很多。