Redis C#-在事务中使用增量值
我正在尝试使用Redis INCR和递增的值作为C#的散列中的字段,使用StackExchange.Redis。 这一点与我需要的类似,但在节点中 下面是我需要的东西Redis C#-在事务中使用增量值,c#,redis,stackexchange.redis,C#,Redis,Stackexchange.redis,我正在尝试使用Redis INCR和递增的值作为C#的散列中的字段,使用StackExchange.Redis。 这一点与我需要的类似,但在节点中 下面是我需要的东西 ITransaction transaction=m_connection.GetDatabase() .CreateTransaction(); Task incrementTask=Transaction.StringIncrementAsync(sequenceNumberRedisKey); if(等待Transactio
ITransaction transaction=m_connection.GetDatabase()
.CreateTransaction();
Task incrementTask=Transaction.StringIncrementAsync(sequenceNumberRedisKey);
if(等待Transaction.ExecuteAsync())
{
long sequenceNumber=等待递增任务;
wait transaction.HashSetAsync(responseRedisKey,sequenceNumber,response);
}
请注意,sequenceNumber
是我打算在事务中执行的第一个操作的结果
代码似乎是在我执行任何操作之前执行和提交事务
redis MULTI/EXEC单元有一个基本功能,这意味着您无法在操作过程中获得结果。因此,有两种常见的方法来满足您的要求:
ScriptEvaluate[Async]
);Lua脚本从头到尾在服务器上执行,效率高,并且避免了与往返时间(延迟或带宽)或来自其他连接的竞争相关的所有问题false
),则需要从头开始重新执行所有操作localid=redis.call(“incr”,键[1])
调用(“hset”,键[2],tostring(id),ARGV[1])
返回id
这里的最佳做法是什么?有没有一个库可以在.NET核心应用程序中用于将C#写入Lua?我把剧本放在哪里。我可以把它像存储过程一样写入Redis吗/你能给我指一些吗documentatiion@JinsPeter上面显示的方法应该做到这一点;该库处理所有脚本加载
etc语义,因此不会每次发送整个正文。如果您自己处理加载(由于卸载问题,不建议这样做):库会检测您是否发出SHA哈希,并做出相应的反应。以下是redis文档:-您只需将脚本和键/值传递给ScriptEvaluate@JinsPeter是的,这看起来确实有点不完整,以至于可能会误导;实际情况是:如果脚本字符串是SHA,它直接使用EVALSHA;否则,库会跟踪它所知道的脚本-如果它认为没有加载脚本,库(如果可以,但并不总是)会自动发布脚本加载;一旦确认,它将使用EVALSHA-直到那时:EVAL。它还检测到EVALSHA中指示已卸载的错误,并重新发布脚本加载等@JinsPeter或更简单地说:库使其“正常工作”: