我目前已经在我的linux系统上测试了redis基准测试,结果给我留下了深刻的印象。但是在进行基准测试时,我使用了16个命令的流水线。现在我试着在c上执行它。我的主要问题是我想把成千上万的随机数据记录到redis中,我不知道如何使用流水线。提前谢谢。
7dl7o3gd1#
在stackexchange.redis中使用管道的最明确的方法是使用 CreateBatch 应用程序编程接口:
CreateBatch
var db = conn.GetDatabase(); var batch = db.CreateBatch(); // not shown: queue some async operations**without**awaiting them (yet) batch.Execute(); // this sends the queued commands // now await the things you queued
但是,请注意,如果不这样做,您可以取得很多成就,因为:来自不同线程(同步或异步)的并发负载被多路复用,允许有效地共享单个连接即使没有批处理api,“发出多个异步操作,但不要等待它们”,同样的技巧仍然可以很好地工作(使用批处理api可以确保批处理作为一个连续块发送,而并发线程的工作不会在批处理中交错;这与 CreateTransaction() api)还要注意,在一些批量场景中,您可能还需要考虑lua( ScriptEvaluate() ); 这个api是varadic的,因此可以适应任意参数长度—您的lua只需要检查 KEYS 以及 ARGV (在文章中讨论) EVAL 文件)。
CreateTransaction()
ScriptEvaluate()
KEYS
ARGV
EVAL
1条答案
按热度按时间7dl7o3gd1#
在stackexchange.redis中使用管道的最明确的方法是使用
CreateBatch
应用程序编程接口:但是,请注意,如果不这样做,您可以取得很多成就,因为:
来自不同线程(同步或异步)的并发负载被多路复用,允许有效地共享单个连接
即使没有批处理api,“发出多个异步操作,但不要等待它们”,同样的技巧仍然可以很好地工作(使用批处理api可以确保批处理作为一个连续块发送,而并发线程的工作不会在批处理中交错;这与
CreateTransaction()
api)还要注意,在一些批量场景中,您可能还需要考虑lua(
ScriptEvaluate()
); 这个api是varadic的,因此可以适应任意参数长度—您的lua只需要检查KEYS
以及ARGV
(在文章中讨论)EVAL
文件)。