Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 有没有办法在redis缓存中创建类似文件夹的层次结构?_C#_Caching_Asp.net Web Api_Redis - Fatal编程技术网

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

C# 有没有办法在redis缓存中创建类似文件夹的层次结构?,c#,caching,asp.net-web-api,redis,C#,Caching,Asp.net Web Api,Redis,因此,我在我的c#webapi中使用redis缓存,并且能够实现类似的层次结构将使我的生活变得更加轻松(如下所示: a-> key1 b-> c ->key2 key3 d ->... ) 我的另一个选择是使用键创建一个树状方法,其中a会给我另外两个键,一个用于键,另一个用于b,因此一个(但会很混乱)Redis支持多种数据类型。对于您的情况,您可以使用,因为散列中可以有另一个嵌套的散列 由于Redis不支持嵌套的数据结构,

因此,我在我的c#webapi中使用redis缓存,并且能够实现类似的层次结构将使我的生活变得更加轻松(如下所示:

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


我的另一个选择是使用键创建一个树状方法,其中a会给我另外两个键,一个用于键,另一个用于b,因此一个(但会很混乱)

Redis支持多种数据类型。对于您的情况,您可以使用,因为散列中可以有另一个嵌套的散列

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


请参见

您在此处尝试的操作有些超出了redis希望您执行的操作。你可以用嵌套键来伪装它(也许是通过散列),但这真的很难处理

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

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


如何访问ReJSON将取决于您使用的客户端库。如果您使用的是SE.Redis,那么可能需要使用
db.Execute(command,args)
方法(因为我没有本机公开的ReJSON绑定)。如果您使用的是“群集”拓扑,请确保密钥以
重新密钥
(而不是
字符串
)的形式传递,以便它知道如何对其进行路由。

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

是的,我想这将是最接近我需要的。谢谢“因为一个散列可以有另一个嵌套的散列”-不,它不能;哈希严格来说是名称/值,这里的“值”是clob/blob。这将不允许您创建层次结构。@MarcGravel我的意思是您可以存储另一个的引用hash@Rahul当然,你可以储存钥匙;但是a:您需要一种消除键和值之间歧义的方法(叶节点与分支节点),b:您需要一种导航和迭代层次结构的方法,这两种方法都不明显/容易,我们在这里讨论的是什么类型的卷?或者换一种说法:仅仅存储JSON clob就足够了吗?您需要执行哪些操作?@marcGravel我希望每个客户端都有一个缓存,但每个客户端都有多个租户,因此我希望有类似租户用户>t1users>jsons用户列表之类的内容。编辑:请记住,我有一些比租户更高级别的客户信息(对所有租户来说都是通用的),并且有了“JSON用户列表”这句话,我的ReJSON答案看起来更合适:)