我不确定在以下情况下哪种数据类型/方法最适合。
我将存储完整的json对象,这些对象中的每一个将具有多个属性,其中一个是ID(整数字段)。
public class Event
{
public int EventId {get; set}
public DateTime EventDate {get; set;}
public string Title {get; set;}
public int TypeId {get; set;}
}
我将需要能够通过此id查找单个对象,我假设这将被存储为键/值对,键为“ something” + id,并且值为序列化json对象。
我希望能够以分页的方式获取上述对象的列表,例如首页,页面大小为20。(哈希集或排序集)
第2个数字也可以通过分页完成,但先由其中一个字段过滤然后返回结果
我想每个json对象只有一个副本来满足上述情况,到目前为止,从我阅读的所有内容看来,我将为每个对象创建多个副本来满足所有上述情况。
简而言之,我喜欢由
检索的存储对象列表通过ID(json对象的属性
没有过滤器的分页列表
具有分页和筛选json对象的分页列表
用户可以随时更改任何事件对象,因此需要更新缓存(使缓存无效/更新缓存无效)
我正在.NET中编写代码,所以这有什么区别。
答案 0 :(得分:0)
看起来像在执行简单的键值查询之外,还需要一些在服务器(Redis)端运行的附加逻辑。您可以在Redis中使用Lua脚本执行此类任务。
如果我正确理解了您的要求,请按照以下方式操作:
将对象存储在已排序的集中(如果您以特定顺序返回对象)
您现在可以通过本机Redis命令查询单个和未过滤的对象: Redis - Sorted set, find item by property value
对于已过滤的对象,您可以查看Lua脚本
Redis不提供任何开箱即用的功能来使列表中存储的缓存无效/更新。而且,您必须编写其他代码来处理缓存更新。在此处阅读更多信息:https://quickleft.com/blog/how-to-create-and-expire-list-items-in-redis
您还可以检查点火,它具有一些您可能会感兴趣的内置功能:
二进制编组器: “它使您可以从对象的序列化形式读取任意字段,而无需完全对象反序列化。” https://apacheignite.readme.io/docs/binary-marshaller
读取/写入以更新缓存:https://ignite.apache.org/use-cases/caching/database-caching.html