使用StackExchange.Redis从Redis进行原子读取和删除

6
有没有一种简单的方法可以使用StackExchange c#驱动程序原子地读取一个值,然后从Redis中删除它? 我在Redis中缓冲项目,当它们达到一定阈值时,我会检索它们,但我也想清空我的缓冲区。 需要说明的是,我将项目存储在列表中,通过“清空缓冲区”我意味着我想要删除该列表。 "key":[项目列表]

1
需要将其包装在一个事务中吗? - apokryfos
1
http://www.rediscookbook.org/get_and_delete.html 也适用于 StackExchange.Redis。 - Christian.K
@apokryfos 没错!说得好!谢谢! - Ben
@Christian.K 我看过那个,但我想知道是否有一种开箱即用的方法或API(因为我正式开始使用StackExchange驱动程序和Redis)。 - Ben
1个回答

10
您可以像这样创建一个事务并原子性地执行GET/DEL操作:
var db = connectionMultiplexer.GetDatabase();
var tran = db.CreateTransaction();
var getResult = tran.StringGetAsync(key);
tran.KeyDeleteAsync(key);
tran.Execute();
var value = getResult.Result;

这将向Redis发送以下命令:
MULTI
GET "key"
DEL "key"
EXEC

如果您的键是列表,您可能需要更改对“tran.ListRangeAsync”的调用。 - thepirat000
这正是我应该做的! - Ben
1
@thepirat000,如果多个应用程序(或同一应用程序在多个服务器上)正在向Redis发出此请求。这段代码会确保只有一个成功吗? - adinas

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