c# - 如何使用日期范围从 Redis (pub/sub) 保存和检索 channel 数据?

标签 c# wcf redis booksleeve

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

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

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

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

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

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

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

-- 更新--

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

save 900 1
save 300 10
save 60 

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

由于发布/订阅事件 are not persisted , 捕获 channel 数据并存储它的好方法是什么?

最佳答案

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

如前所述:发布/订阅不会持久化。我建议使用队列; Redis 中的“list”类型是理想的选择,lpushrpushlpoprpoprpoplpushltrim 都是该场景的关键命令。您也可以选择使用 pub/sub ,以通知客户端新数据的可用性 - 或者您可以使用阻塞弹出命令,blpop brpopbrpoplpush。所有这些操作都定义了 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 在重新加载之前,使其不适合这种情况)

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

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

关于c# - 如何使用日期范围从 Redis (pub/sub) 保存和检索 channel 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14446531/

相关文章:

c# - 如何读取位于不同项目的类库中的配置?

c# - IDataErrorInfo - 是否存在集合不为空的验证属性?

c# - REST 服务中的 POST 请求为空

java - 在mac上通过java运行redis时权限被拒绝

c# - 有没有办法按所需顺序运行 Specflow 场景(C# Selenium)?

c# - 您可以模仿WCF中的现有服务吗?

json - 向引用了 JSON.NET 库的项目添加服务引用时出现奇怪的问题

redis - 如何序列化为字符串然后反序列化(对于 Redis)?

Redis 通知

c# - 您如何按照从最少到最多非零元素的顺序遍历排列?