2017-06-20 84 views
0

问题声明:我们的模块之一(Ticket模块 - 存储过程)需要4-5秒才能从DB返回数据。此存储过程支持7-8个过滤器+它已连接到4-5个表以获取存储在故障单表中的ID的文本,例如(客户端名称,故障状态,故障类型...),并且这阻碍了SP的性能。Redis缓存结构用例

当前技术堆栈:ASP.Net 4.0的Web API,MS SQL 2008

我们计划推出的Redis作为缓存服务器和节点JS与改进的性能和可扩展性的目的。

使用案例:我们有服务票据模块和它具有以下属性

  1. TicketId
  2. 客户端ID
  3. TicketDate
  4. 查询状态
  5. 门票类别

这个模块中的每一个用户可以访问的固定没有任何客户端的,即

  • 用户1访问客户端1,2,3,4的车票......
  • 用户2可以访问客户端的票1,2,5,7 ......

因此,基本上当User1访问Ticket模块时,他应该能够过滤TicketId,Client,Ticket Date(From和To),Ticket Status (打开,保持,进行中...)和票据类型(请求,投诉,服务.....)+因为用户1只能访问客户端1,2,3,4 ......,所以只应该缓存给出他可以访问的客户的门票列表。

希望如果你们可以分享您的观点,我们应该如何组织Redis的即是我们应该使用上述各项目,即HashSet的,集,有序set ... +我们应该如何筛选取决于门票客户端resp用户的访问权限。

回答

0

Redis是一个关键/值存储。我会使用HashSet的具有如下的结构: 重点:ticketId 子项:的clientId,ticketDate,ticketStatus,ticketType

搜索,排序等 - 程序处理来自应用程序或/和LUA。

+0

完美!我们使用Hashset来存储整个Ticket对象和集合,以维护用于过滤的索引,例如TicketStatus_Open,TicketStatus_Closed,TicketType_Request .......等等。但是,一旦我们获得了票证ID列表过滤后,我们如何将TicketId列表简化为客户的TicketIds列表(如上所述),以便特定用户可以访问或循环访问过滤列表并检查用户是否有权访问resp票证的客户端只是解决方案 - – Vipul