0

我正在尝试为 .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. 原始- 必须批准的实体项目的集合(最多 10% 的当前集合的唯一 ID)

我将对这些集合执行的操作是:

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

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

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

  3. 修改当前集合

    3.1)原始集合的所有更改都应用于当前(如果尚未完成):SyncCurrent

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

    3.3)清除原始集合实体(集合被重置)

方法:

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

  2. 创建其他集合 Current:Ids, Raw:Ids 将仅包含集合中项目的 Id - 定义项目是否在原始集合中:SISMEMBER

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

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

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

  1. 新的 StackExchange 客户端有时会在 SMEMBERS 上引发超时异常(当前集合中有 500 个项目)

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

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

先感谢您。

4

0 回答 0