有没有办法在redis缓存中创建类似文件夹的层次结构?

时间:2018-04-19 09:56:54

标签: c# caching asp.net-web-api redis

所以我在我的c#webapi中使用redis缓存,并且能够实现类似的层次结构会让我的生活更轻松(像这样:

a-> key1
    b-> c ->key2
            key3
        d ->...

我的另一个选择是使用键制作一个类似于树的方法,其中一个会给我另外两个键,一个用于键,另一个用于b,所以一个(但会是一团糟)

3 个答案:

答案 0 :(得分:2)

Redis支持多种数据类型。对于您的情况,您可以使用Hashes,因为哈希可以在其中包含另一个嵌套哈希。

由于Redis不支持嵌套数据结构,因此您可以通过在外部哈希中存储内部哈希引用来存储它,这将在检索数据时遇到困难。否则,您可以将层次结构对象结构创建为JSON(或者,如果您已有),并将该序列化对象存储在Redis中。

请参阅Storing nested objects in Redis

答案 1 :(得分:2)

您在这里尝试做的事情有点超出了想要你要做的事情。您可以使用键内的嵌套键伪造(可能通过哈希),但很难与一起使用。

然而!这可能非常适合redis"模块" (需要redis 4. *)。特别是,我想知道ReJSON是否合适。这是用于JSON使用的设计,但坦率地说:JSON是一种分层嵌套键/值数据类型 - 正是您想要的。只需忽略JSON部分:)

特别是,ReJSON允许您通过在您使用过XPath时熟悉的语法来查询,访问和操作任意节点。

如何访问ReJSON将取决于您使用的客户端库。如果你正在使用SE.Redis,你可能会想要使用db.Execute(command, args)方法(因为我没有本机暴露的ReJSON绑定)。如果您正在使用"群集"拓扑,确保作为RedisKey(而不是string)传递,以便它知道如何路由它。

答案 2 :(得分:1)

如果您使用redis命令查看缓存,则可以使用用冒号分隔的键,例如set1:subset:subset:key。它不是真正的层次结构,但在命令视图中显示为文件夹。