如何从日期范围的Redis(pub / sub)保存和检索频道数据?

时间:2013-01-21 20:20:12

标签: c# wcf redis booksleeve

最初我问过查询.rdb文件,这不是我想做的事情 - 我将查询一个活动服务器。

我即将开始一个项目,我们将使用RDB快照在pub / sub场景中使用Redis。

.Net WCF客户端将通过Marc Gravell's BookSleeve配置Redis连接并接受传入请求。

启用RDB快照后,将创建增量快照。

我希望客户能够根据给定的渠道和日期范围检索数据集。我以为我会使用相同的WCF客户端进行读写操作(除非有任何明显的异议)。我不清楚用什么方法来查询服务器以检索日期范围,通道特定数据,并通过WCF客户端传递它。

我是否可以通过BookSleeve实现此数据查询功能(如果是,如何)或是否有其他更适合使用的访问包装器,例如ServiceStack.Redis

使用BookSleeve进行写入以及ServiceStack.Redis作为客户端会更好吗?

- 更新 -

我将快照设置为默认值:

save 900 1
save 300 10
save 60 

使用Redis Admin UI浏览数据,我希望在15分钟(900秒)之后看到存储在密钥中的一些数据,但搜索键会显示通道名称(和其他键),但没有值内。

自发布/子事件are not persisted以来,捕获频道数据并存储它的好方法是什么?

1 个答案:

答案 0 :(得分:1)

编辑以解决OP的编辑问题:

如上所述:pub / sub不会保留。我建议使用队列; redis中的“list”类型非常适合lpushrpushlpoprpoprpoplpushltrim该场景的关键命令。您可以选择使用pub / sub 以及来通知客户端新数据的可用性 - 或者您可以使用阻止弹出命令blpopbrpopbrpoplpush。所有这些操作都定义为here


我可以澄清一下:听起来你有一堆rdb文件,想要从任意文件中读取(“增量快照”)。那是对的吗?

除非您使用专用工具来解析它们,否则rdb文件本身并不是很有用。 Redis客户端(如BookSleeve和ServiceStack)希望与正在运行的Redis实例进行通信。您的问题听起来有点像“我有一系列日期的sql-server .bak文件;如何从SomeTable获取数据?” - 答案是“首先将bak加载到SQL Server中”。

启动redis-server非常简单,但它不希望从多个rdb文件中读取。

选项:

  1. 手动解析rdb; see this thread - 期待痛苦
  2. 在需要时立即启动redis-server实例...好吧,它将工作,但流程管理可能会变得“有趣”
  3. 提前启动每个文件的redis-server实例...然后你需要担心端口管理/映射和监视新文件
  4. 使用DEBUG RELOAD进行热插拔; 然而 ,这实际上并不是非常受支持,而且在测试中我无法让它正常运行(特别是,它似乎之前执行SAVE重新加载,使其不适合这种情况)
  5. 但最终,你想要在运行中选择一系列不同的rdb文件并不是Redis的正常用例。

    如果我理解了您的要求,那么这不是客户端问题,更不用说特定于平台的问题(.NET,C#,WCF等):首先您需要了解你将如何运行服务器或以其他方式阅读文件。最好在Redis DB

    中询问