如何在事务中从哈希中获取所有条目?我看不到具有正确类型的onSuccessCallback
。我尝试将其映射为byte[][]
,我认为我可以手动反序列化它,但是redis抱怨(针对持有错误值的键的操作)
有没有这样做?
var hashValues
using (var trans = client.CreateTransaction())
{
trans.QueueCommand(c => hashValues=c.GetAllEntriesFromHash("some key"));
trans.Remove("some key");
trans.Commit();
}
return hashValues;
所以我要做的是从哈希中获取所有值然后删除该哈希的原子操作。
答案 0 :(得分:2)
我能想出的最佳方式如下。基于this from Redis,看起来Redis的返回是fieldname,后跟它的值。 ServiceStack.Redis会为您处理dictionary mapping。为了让所有事情都能在交易中发挥作用,我认为你必须在'Redis'层面上工作。
byte[][] hashAll = null;
var client = new BasicRedisClientManager("localhost:6379");
using (var trans = client.GetClient().CreateTransaction())
{
trans.QueueCommand(r => ((RedisNativeClient)r).HGetAll("meHashKey"), result => hashAll = result);
trans.QueueCommand(r => r.Remove("meHashKey"));
trans.Commit();
}
//variable map will hold the Hash/Dictionary<string, string>/Key-Value Pairings
var map = new Dictionary<string, string>();
for (var i = 0; i < hashAll.Length; i += 2)
{
var key = hashAll[i].FromUtf8Bytes();
map[key] = hashAll[i + 1].FromUtf8Bytes();
}