有没有支持流式读取的 C 或 C++ Redis 客户端?

4
我们正在考虑将Redis作为大型数据集中间计算结果的缓存系统。例如,我们可能会处理一个1GB的文件,并将其转换为512MB的数据集,然后将其流式传输给客户端。问题在于,当我们从Redis请求数据时,我们不希望等到所有512MB的数据都发送到服务器后才开始将其发送给客户端。我已经查看了一些用于Redis的C和C ++库(如redox、redis3m),即使是异步的,它们似乎也只能在整个结果返回时给您回调,而不能在缓存返回部分结果时给您回调。是否有任何可以按缓冲区大小返回值的库?
更新:这是我希望得到的一种接口类型。示例仅用于澄清;
Socket clientSocket;
/* some code that has accepted a connection from a client */
/*  ....... */

RedisClient cl;
cl.Connect("server");
cl.GetValueAsync(
    "largePreCalculated", // key
    [clientSocket](char *buffer, int bytesAvailable) {
         clientSocket.write(buffer, bytesAvailable);
    }, // callback when data from the value has come over the wire
    [clientSocket]() {
         clientSocket.close();
    } // callback when all data from value has been received
);

2
有趣的问题 - 我肯定很想听听建议。不过,这个话题不适合在 SO 上讨论。 - Pradhan
@Pradhan,这个问题为什么不相关? - bpeikes
在SO上,询问库建议的问题是不被允许的。我现在正在使用手机,无法为您指出帮助页面。 - Pradhan
Redis是单线程的。除非在Redis集群上,否则您不能同时执行两个操作。因此,您将不得不切分数据并执行多个请求来完成操作。 - zenbeni
1
Redis的线程模型不应该有任何影响。我希望我的中间件在调用Redis服务器时,能够将数据作为从套接字读取的方式返回,而不是将所有数据收集到单个缓冲区并返回。 - bpeikes
显示剩余10条评论
1个回答

0

试着看看bredis。虽然它不允许你在从redis接收到回复之前获取数据(必须解析,对吧?),但它返回几乎原始(可能是分段的)boost::asio缓冲区,旨在最小化内存重新分配。

PS. Redis协议(以及C++客户端)支持pipelining,即同时读写套接字。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接