c# - 如何在 C# 中使用 redis pipiline(StackExchange.Redis)?

标签 c# redis stackexchange.redis

我目前在我的 linux 系统上测试了 redis-benchmark,结果给我留下了深刻的印象。但是在进行基准测试时,我使用了 16 个命令的流水线。现在我正在尝试在 c# 上执行它。
我的主要问题是我想将数千个随机数据记录到 redis 中,但我不知道如何使用流水线。

提前致谢。

最佳答案

在 StackExchange.Redis 中使用流水线的最明确方式是使用 CreateBatch接口(interface):

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

但是,请注意,如果没有它,您可以取得很多成就,因为:
  • 来自不同线程的并发负载(同步或异步)is multiplexed ,允许有效共享单个连接
  • 即使没有批处理 API,“发出多个异步操作但暂时不等待它们”的相同技巧仍然可以正常工作(使用批处理 API 确保批处理作为连续 block 发送,而并发线程的工作不会在批处理;这与 CreateTransaction() API 相似但不那么严格)

  • 另请注意,在某些批量场景中,您可能还需要考虑 Lua (ScriptEvaluate());这个 API 是可变的,所以可以适应任意的参数长度——你的 Lua 只需要检查 KEYS 的大小。和 ARGV (discussed in the EVAL documentation)。

    关于c# - 如何在 C# 中使用 redis pipiline(StackExchange.Redis)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61117360/

    相关文章:

    redis - Stack Exchange连接到Redis集群连接错误

    c# - StackExchange.Redis 空闲时间后出现连接问题

    c# - WPF DataGrid - 编辑结束后单元格的新值

    c# - 在 .NET Compact Framework 3.5 上实现 TLS 1.2

    ruby-on-rails - Redis 去 - Heroku - Rails

    c# - StackExchange.Redis key 按 UTC 日期过期

    c# - WMI 检索用户所属的组?

    c# - 转换链表

    redis - 我想知道为什么Redis使用key-value来存储?

    rspec - 当在一个 RSpec 套件中调用多个 with_api() 测试时,Goliath 会破坏 em-synchrony/em-hiredis