小编典典

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

redis

最初,我询问关于查询.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秒)后会看到一些存储在键中的数据,但是,搜索键会显示通道名称(和其他键),但其中没有值。

由于发布/订阅事件不会持续存在,因此捕获通道数据并将其存储的好方法是什么?


阅读 350

收藏
2020-06-20

共1个答案

小编典典

编辑以处理OP的编辑:

如前所述:pub / sub不持久。我建议 使用队列 ;
“列表”类型的Redis是理想的,有lpushrpushlpoprpoprpoplpush并且ltrim全部为关键的有关该方案的命令。您可以选择使用的pub/ sub 以及 ,通知新数据的可用性的客户-或者你可以使用拦截弹出命令blpopbrpopbrpoplpush。所有这些操作都在这里定义。


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

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

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

选项:

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

但最终,要即时获取一系列不同的rdb文件并不是Redis的正常用例。

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

2020-06-20