将 List<T> 存储在 StackExchange.Redis 中的最佳实践
Best practice to store List<T> in StackExchange.Redis
我正在尝试找到针对 ReportingDate 键存储一组 List 对象的最佳实践(有效)方法。
列表可以序列化为 Xml/DataContract 或 ProtoBuf....
鉴于某些数据可能很大(对于那部分密钥):
- 我想知道是否有任何以 IEnum/streamed 方式从 Redis 缓存中获取数据的方法? Atm 我们使用 ProtoBuf.NET 来拥有基于文件的缓存。我们以流方式将数据检索到内存中(我们还可以选择 props/fields 我们想要在 T 对象中使用的内容,因为 ProtoBuf 允许我们这样做)
- 有没有什么方法可以强制(在一些不活动之后)数据的某些部分从内存中卸载并返回到文件中(如果它不被使用)。但是如果调用了就重新加载
Tnx
听起来您想要一个有序集 - 请参阅 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.
中可用
我正在尝试找到针对 ReportingDate 键存储一组 List 对象的最佳实践(有效)方法。
列表可以序列化为 Xml/DataContract 或 ProtoBuf....
鉴于某些数据可能很大(对于那部分密钥):
- 我想知道是否有任何以 IEnum/streamed 方式从 Redis 缓存中获取数据的方法? Atm 我们使用 ProtoBuf.NET 来拥有基于文件的缓存。我们以流方式将数据检索到内存中(我们还可以选择 props/fields 我们想要在 T 对象中使用的内容,因为 ProtoBuf 允许我们这样做)
- 有没有什么方法可以强制(在一些不活动之后)数据的某些部分从内存中卸载并返回到文件中(如果它不被使用)。但是如果调用了就重新加载
Tnx
听起来您想要一个有序集 - 请参阅 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.
中可用