2

最初我询问了查询 .rdb 文件的问题,这不是我想做的——我将查询一个活动服务器。

我即将开始一个项目,我们将在发布/订阅场景中使用 Redis,使用 RDB 快照。

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

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

我希望客户端能够根据给定的渠道和日期范围检索数据集。我在想我会使用相同的 WCF 客户端进行读写(除非有任何明显的反对意见)。我不完全清楚使用什么方法来查询服务器来检索日期范围、通道特定数据,并通过 WCF 客户端提供这些数据。

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

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

- 更新 -

我已将快照设置为默认值:

save 900 1
save 300 10
save 60 

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

由于发布/订阅事件没有持久化,那么捕获通道数据并存储它的好方法是什么?

4

1 回答 1

1

编辑以解决 OP 的编辑:

如前所述:发布/订阅不会持久化。我建议使用队列;redis 中的“列表”类型非常适合这种情况,其中lpush, rpush, lpop, rpop,rpoplpush以及ltrim所有这些都是该场景的关键命令。您也可以选择使用 pub/sub通知客户端新数据的可用性 - 或者您可以使用阻塞弹出命令blpopbrpopbrpoplpush。所有这些操作都在这里定义。


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

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

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

选项:

  1. 手动解析rdb;看到这个线程- 期待痛苦
  2. 在需要时为每个文件动态启动一个 redis-server 实例......好吧,它会工作,但流程管理可能会变得“有趣”
  3. 提前为每个文件启动一个 redis-server 实例......然后你需要担心端口管理/映射,以及监视新文件
  4. 使用热加载DEBUG RELOAD但是,这并不是真的很受支持,并且在测试中我无法让它正常运行(特别是,它似乎SAVE在重新加载之前做了一个,使其不适合这种情况)

但归根结底,拥有一系列不同的 rdb 文件供您即时选择并不是 Redis 的正常用例。

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

于 2013-01-22T10:40:29.400 回答