1

在事务中如何从哈希中获取所有条目?我没有看到一个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;

所以我想做的是从哈希中获取所有值然后删除该哈希的原子操作。

4

1 回答 1

3

我能想到的最好方法如下。基于Redis 的这一点,Redis的返回值似乎是字段名,后跟它的值。ServiceStack.Redis为您处理字典映射。为了让一切都在事务中工作,我认为你必须在“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();
}
于 2013-04-15T18:43:43.027 回答