使用Sets和.Net客户端在redis中管理2个集合。这是正确的方法吗?

时间:2014-04-01 13:18:11

标签: c# caching redis booksleeve stackexchange.redis

我正在尝试工作/调查.NET区域的redis,我有一个印象,定义的任务最好用Sets和redis本身覆盖(因为我确实有我需要修改的实体) - 所以也许它是最好在这里使用一些其他方法/或redis数据类型(最初的想法之一是使用redis哈希(管理属性),但后来我决定尝试使用集合,因为我需要获取相关实体的集合,并且此操作似乎是最重要的一般)。那么,我现在所做的:

现在我确实有下一个实体配置:

Entity:
    ID : Guid
    Name : string 500
    Status : string 1 (i, u, d)
    MaxItems : int 
    CurrentItems : int

我正在尝试做的是管理包含2个集合的实体项目:

  1. 当前 - 客户可用的实体项目(最多5000个)的集合(缓存)
  2. 原始 - 必须获得批准的实体项目的集合(最多占当前集合的唯一ID的10%)
  3. 操作我将再次执行这些集合:

    1. 从当前集合中获取所有实体项:GetCurrent - 最关键的任务
    2. 修改Raw集合:

      2.1)将新实体添加到Raw中(可以更改Current集合中适当的计数器/状态):AddRaw

      2.2)更新Raw中的现有实体(如果此ID已经可用):UpdateRaw

    3. 修改当前集合

      3.1)来自Raw集合的所有更改都应用于Current(如果尚未完成):SyncCurrent

      3.2)返回Raw集合实体(增量更改)

      3.3)清除Raw集合实体(集合已重置)

    4. 方法

      1. 定义集类型的集合(以便能够获取与集合相关的项目列表): SMEMBERS

      2. 创建其他集合当前:Ids,Raw:仅包含集合中项目ID的ID - 用于定义原始集合中的项目: SISMEMBER

      3. 将新项目添加到集合中: SADD

      4. 修改集合中的项目:获取(SMEMBERS: SSCAN ,使用Id作为掩码元素或迭代项目( SMEMBERS )),获取带ID的实体),RemoveOldFromSet: SREM ,AddUpdated: SADD

      5. 问题,问题(在单元测试中确定):(所有报告的问题似乎都与redis服务器本身的连接有关,而不是与StackExchange.redis客户端的功能有关)

        1. 新的StackExchange客户端有时会在SMEMBERS上抛出timeOut异常(500个项目进入当前集合)

        2. 当尝试将项目(750多个条目)插入到当前和当前的集合中时,StackExchange事务会抛出timeOut异常:Ids,当前connectionTimeOut和SyncTimeOutrs设置为5000毫秒(5秒)

        3. 在运行一些测试之后(内部有数百个项目,我认为选择的方法最初是错误的,必须重新设计 - 使用Microsoft的缓存。)是否有其他人有类似的疑虑或者可以从自己的经验说类似的任务不应该按照我刚才描述的方式实现吗?

          提前谢谢你。

0 个答案:

没有答案