Mat*_*zer 6 rest http redis odata asp.net-web-api
如果您考虑使用Redis实现二级缓存的大规模解决方案,或者您的第一个数据源也是Redis,我不会发现ASP.NET WebAPI OData实现如何与类似的东西一起工作键值存储.
我可以通过OData解析器分析生成的表达式树并将一些过滤器转换为Redis操作,但是当您实现纯REST时,Redis的整体特性最适合:
http://somesite.com/users=> users(Redis设置)http://somesite.com/users/1=> users:11(Redis键)如果我想要最新的注册用户,也许我会这样:
http://somesite.com/users/latest=> users:latest(Redis排序集)在这种情况下OData需要做什么?
我认为 Redis 在 OData 环境中非常有用。我想首先要解决一个认知问题:OData 不是“纯粹的 REST”。当然,REST 可以有很多含义,因为它的标准很少。在大多数情况下,REST 意味着 HTTP/S 上的 JSON,使用映射到实体操作的标准 HTTP 动词。OData 只是简单地接受这一点,为其添加一些更正式的定义,并为其添加一个标准元数据层(如果需要,您可以选择忽略它)。因此,我将 OData 称为“JSON++”。我认为我还没有见过不支持 JSON 的 OData 实现,尽管如果未指定 JSON,许多实现都默认为 Atom。那么,当使用 JSON 与 OData 交互时,有什么不是“纯 REST”的吗?
也就是说,我看到了在 OData 世界中与 Redis 交互的两种有趣的方式。为 Redis 构建一个 OData 前端是可能的,甚至很有趣。我想这并不是一件小事,但它应该是可能的。我不知道有人这样做,但可能有。例如,Node.js 有一个 OData 提供程序,也许有人为 Redis 做了一些事情。
但即使使用普通的 Redis,也应该只是使用 OData URL 作为 Redis 键(您似乎倾向于这种方式)——在查询级别缓存结果。这似乎就是您在示例中所说明的内容。由于您正在缓存数据,因此您可能希望在插入条目后使用 EXPIRE 命令管理缓存结果的生命周期。如果您想真正了解一下,可以查看预填充 Redis 缓存的策略。
您提到了更精细地使用 Redis 的可能性 - 因此需要您解析查询等。当然,您可以在实体级别使用 Redis 缓存并在其之上完全实现所有 Odata。就我个人而言,我不确定这是否值得如此复杂。我喜欢在查询结果的粒度上使用 Redis 的想法。
对您问题的简短回答:您可以使用 REST/JSON+Redis 完成的任何操作,都可以使用 OData+Redis 完成。Value prop 是相同的。