使用StackExchange.Redis在Azure Redis缓存中存储自定义.Net对象

时间:2014-10-28 16:17:16

标签: c# linq azure stackexchange.redis

我们正在实施StackExchange.Redis来存储有关三个电子商务网站的所有信息(大约18,500种产品)。信息存储在SQL Server数据库中,映射到自定义对象,然后使用此密钥命名约定添加到Azure Redis缓存中:

urn:products:{0}:{1}

(其中0是商店标识符,1是产品标识符)。我看了Where are KEYS, SCAN, FLUSHDB etc?并且能够获得与urn:products:{0}模式匹配的密钥。我们面临的问题是我们的项目涉及大量GetAllProducts List < Products >GetAllCategories List < Categories >,然后由LINQ函数使用。

基于此:

  • 我尝试将所有产品(自定义对象列表)存储在一个密钥(urn:products:all)中,但该方法在Azure Redis缓存中生成了超时。这种方法是建议的吗?或者最好将每个产品存储在单独的密钥中?
  • 我认为循环每个键以获取每个值是不正确的。是否可以通过模式获得键/值的集合?
  • 我也读过HASHES,但我认为它们不符合我们的要求。

1 个答案:

答案 0 :(得分:1)

我想知道你一次拨打大量记录的方法。我建议将它们分成不超过一千条记录。

Redis仅具有非常有限的功能,因此您的要求可能无法满足。 Redis适用于缓存或简单的键值getter和setter。为此,您可以考虑使用其他基于内存的数据库,例如MongoDB。

在您的情况下,Redis 设置是组合或减少给定条件的最佳方法,或哈希用于基于属性的对象存储。无论选择何种方法,您都将使用两种或更多数据类型,因为Redis数据类型不是那么通用。

RedisCookbook描述了很好的例子。