如何使用日期范围从 Redis (发布/订阅) 保存和检索频道数据

本文关键字:保存 订阅 检索 数据 频道 发布 日期 何使用 范围 Redis | 更新日期: 2023-09-27 17:55:18

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

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

.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 秒)后看到存储在密钥中的一些数据,但是,搜索密钥会显示通道名称(和其他密钥),但没有值。

由于发布/订阅事件不会持久化,因此捕获和存储通道数据的好方法是什么?

如何使用日期范围从 Redis (发布/订阅) 保存和检索频道数据

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

如前所述:发布/订阅不会持久化。我建议使用队列;Redis 中的"列表"类型是理想的选择,lpushrpushlpoprpoprpoplpushltrim 都是该场景的键盘命令。您也可以选择使用 pub/sub 来通知客户端新数据的可用性 - 或者您可以使用阻止弹出命令、blpopbrpopbrpoplpush 。所有这些操作都在此处定义。


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

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

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

选项:

  1. 手动解析 RDB;请参阅此线程 - 预期疼痛
  2. 在需要时,每个文件动态启动 Redis 服务器实例...好吧,它会起作用,但流程管理可能会变得"有趣"
  3. 提前为每个文件启动一个 Redis 服务器实例...然后,您需要担心端口管理/映射以及监视新文件
  4. 热负荷使用DEBUG RELOAD;但是,这实际上不是很受支持,并且在测试中我无法使其正常运行(特别是,它似乎在重新加载之前做了一个SAVE,使其不适合这种情况)

但最终,拥有一系列不同的 rdb 文件,你想从中即时选择并不是 Redis 的正常用例。

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