RedisTemplate按值

时间:2017-03-08 09:12:26

标签: spring redis

我在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中可以吗?

1 个答案:

答案 0 :(得分:0)

不,这在Redis中是不可能的。但是,您可以同时存储反向地图,如下所示:

    fileHash -> "{typeOfFile}:{id}:{filename}"

此解决方案假定文件哈希是唯一的。如果散列不是唯一的,那么您可以存储一组具有相同散列的id,检索每个散列的内容并进行比较。仍然比原始解决方案快很多。