最初,我询问关于查询.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是理想的,有lpush,rpush,lpop,rpop,rpoplpush并且ltrim全部为关键的有关该方案的命令。您可以选择使用的pub/ sub 以及 ,通知新数据的可用性的客户-或者你可以使用拦截弹出命令blpop,brpop和brpoplpush。所有这些操作都在这里定义。
lpush
rpush
lpop
rpop
rpoplpush
ltrim
blpop
brpop
brpoplpush
我可以澄清一下:听起来好像您有一堆rdb文件,并且想从任意文件中读取(“增量快照”)。是这样吗?
除非使用专用工具解析rdb文件,否则它们本身并不是很有用。Redis客户端(如BookSleeve和ServiceStack)希望与正在运行的Redis实例进行通信。您的问题听起来有点像“我在某个日期范围内都有sql- server .bak文件;如何从中获取数据SomeTable?” -答案是“首先将bak加载到SQL Server中”。
SomeTable
启动redis服务器非常容易,但是它并不希望从多个rdb文件中读取。
选项:
DEBUG RELOAD
SAVE
但最终,要即时获取一系列不同的rdb文件并不是Redis的正常用例。
如果我了解您的要求,那么 这不是客户端问题 ,更不用说平台特定的问题(.NET,C#,WCF等):首先,您需要弄清楚如何运行服务器(s)或以其他方式读取文件。在RedisDB中最好问这个问题