gpt4 book ai didi

c# - 如何在 C# 中锁定服务堆栈 Redis 列表

转载 作者:可可西里 更新时间:2023-11-01 11:13:25 26 4
gpt4 key购买 nike

在c#中,使用服务栈redis,基于以下网址,

https://github.com/ServiceStack/ServiceStack.Redis/wiki/RedisLocks

要锁定字符串条目,使用以下方法。

RedisClient objRedisClient = new RedisClient... // redis working fine
objRedisClient.SetEntry("stringkey", "abcd");
using (objRedisClient.AcquireLock(strRedisKey))
{
objRedisClient.SetEntry("stringkey", "efdh");
}

上面的 SetEntry 代码可以很好地设置字符串值。但是当使用相同的代码锁定列表时,它会抛出 Redis 异常。

  using (objRedisClient.AcquireLock("listkey"))
{
objRedisClient.Lists["listkey"].Push("{}");
}

Acquirelock 方法工作正常,但在 using 语句中将新值推送到列表会引发以下异常。

WRONGTYPE Operation against a key holding the wrong kind of value, sPort: 50371, LastCommand: RPUSH 97:Q {}

它只是一个简单的控制台应用程序。没有acquire lock方法,value被成功添加到列表中。

如何在 C# 中锁定 Redis 列表?

最佳答案

我认为你用错了,整个锁部分用于分布式锁并使用 SETNX命令背后(算法也在命令页面上解释)。此命令仅适用于普通键,不适用于其他类型(列表、哈希等)。锁用于不同进程之间的同步,因此使用普通 key 以外的东西没有意义。

如果您想确定,请打开一个 redis-cli 监视器,看看您的客户端发送给 Redis 的命令到底是什么(它应该是一个 SETNX)。

关于c# - 如何在 C# 中锁定服务堆栈 Redis 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32762979/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com