当前位置: 首页 > 面试题库 >

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

戚鸿
2023-03-14
问题内容

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

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


问题答案:

编辑以处理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中最好问这个问题



 类似资料:
  • 问题内容: 我正在尝试将Redis会话集成到用Node.js编写的身份验证系统中。 我已经能够成功设置Redis服务器和Express服务器。 这是我的设置(只是重要的一点): 现在…我该如何实际创建,阅读和销毁会话?我已经阅读了很多关于如何设置的文章以及关于SO的许多问题,但是我发誓每个都只停留在配置上,并且不解释如何实际使用它… 我知道这可能非常简单,但是请不要投票,而只是解释一下:)。 问题

  • 问题内容: 开始使用redis作为sub / pub系统在新项目上工作,以显示mysql数据库的结果。因此,如果有更新,我想将这些更新从mysql发布到我的网页。我的问题是,哪种选择更好? 选项1:是否应该仅通过nodejs和socket.io完成所有这些工作?意思是创建一个连接到redis的nodejs脚本,订阅我需要收听的频道,在nodejs中使用mysql查询数据库以获取更新,如果更新发布了

  • 问题内容: 我有一个具有以下结构的模型 保存时其他一切都很好。它将另存为Firebase Realtime数据库 但是当我尝试检索它时,日期给出了以下错误- 我知道Firebase不支持Java Date对象,但是由于它将它们保存在地图中,如何从该地图中获取日期?在Firebase Android中,是否有任何适当的保存和检索日期的方法? 问题答案: 您可以将日期存储为纪元日期。您可以花很长的时间

  • 我正在尝试使用Node Lambda函数在日期范围之间进行扫描。我正确扫描了数据,但我似乎无法让日期表达式正确工作。 这目前并没有试图在一个范围内返回,它只是现在查看一个日期。我不想在表达式中添加一个和,直到我知道这是可行的。 我的DynamoDB中的示例文档的结构如下: 文档id是我的主键。我对Lamdba和DynamoDB的组合还很陌生,所以我可能把它完全设置错了,但这是我通过研究成功完成的。

  • 问题内容: 我将如何存储my_dict并使用Redis进行检索。例如,以下代码不起作用。 问题答案: 您可以通过(使用来设置多个键)来做到这一点。

  • 问题内容: 在pub- sub的情况下,Redis使用什么机制将消息保留在内存中?如果没有客户端订阅,消息将如何处理?Redis会缓冲它们吗?有没有一种配置最小值的方法。和最大 每个通道分配的内存? 问题答案: 在实现(x)中可以看到,Redis不会在Pub / Sub上下文中将消息保留在内存中: 邮件会发送给监听该频道的客户端(如果有), 该消息将发送给正在侦听匹配频道(如果有)的客户端。 然后