Servicestack.redis事务和哈希

时间:2013-04-13 15:13:08

标签: transactions redis servicestack

如何在事务中从哈希中获取所有条目?我看不到具有正确类型的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;

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

1 个答案:

答案 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();
}