在StackExchange.Redis中存储List <t>的最佳实践

时间:2017-05-26 08:17:28

标签: redis stackexchange.redis

我正在尝试找到针对ReportingDate密钥存储List对象集的最佳实践(高效)方法。

列表可以被选择为Xml / DataContract或ProtoBuf ....

鉴于一些数据可能很大(对于那一段关键字):

  • 我想知道是否有任何以IEnum /流式方式从redis缓存中获取数据?我们使用ProtoBuf.NET来拥有基于文件的缓存。我们以流式方式将数据检索到mem(我们还可以选择在T对象中选择我们想要的道具/字段,因为ProtoBuf允许我们这样做)。
  • 是否有任何方法可以强制(在一些不活动之后)数据的某些部分从mem卸载并返回到文件中(如果没有使用)。但如果被称为
  • ,请再次加载它

TNX

1 个答案:

答案 0 :(得分:2)

听起来你想要一个有序集 - 见https://redis.io/topics/data-types#sorted-sets。您可以使用日期作为值,也许在纪元时间(因为它需要是一个数字)。 SE.Redis支持您期望获得值范围的所有操作(位置范围 - 前20个记录等;或绝对范围基于值 - 两个日期之间的所有项目以相同单位表示)。查看以“SortedSet ...”开头的方法。

值可以是二进制,因此protobuf-net很好(您可以单独序列化每个日期的值)。只需传递byte[]作为值。您需要单独处理序列化到redis库。

至于交换数据:没有。 Redis具有基于日期的到期日期,但没有冷热存储。它要么存在,要么不存在。您可以使用计划任务基于日期范围清除或移动数据,再次使用任何Z *(redis)或SortedSet *(SE.Redis)方法。

有关Z *操作的完整列表,请参阅:https://redis.io/commands#sorted_set。它们都应该在SE.Redis中提供。